Рубрики
Без рубрики

Кулинарная книга коллекций Гуавы

Кулинарная книга коллекций Гуавы, иллюстрирующая примеры кода и ничего больше.

Автор оригинала: Eugen Paraschiv.

1. введение

Эта статья из кулинарной книги организована в небольшие и целенаправленные рецепты и фрагменты кода для использования коллекций в стиле гуавы.

Формат представляет собой растущий список примеров кода без дополнительных пояснений, необходимых – он предназначен для обеспечения простого доступа к обычным функциям API во время разработки.

2. Рецепты

понизьте список<Родительский> до списка<Дочерний>

примечание : это обходной путь для нековариантных обобщенных коллекций в Java

class CastFunction implements Function {
    @Override
    public final T apply(final F from) {
        return (T) from;
    }
}
List originalList = Lists.newArrayList();
List theList = Lists.transform(originalList, 
    new CastFunction());

более простая альтернатива без гуавы – включает 2 операции литья

List originalList = Lists.newArrayList();
List theList = (List) (List) originalList;

добавление итерируемого элемента в коллекцию

Iterable iter = Lists.newArrayList();
Collection collector = Lists.newArrayList();
Iterables.addAll(collector, iter);

проверьте, содержит ли коллекция элементы в соответствии с пользовательским правилом сопоставления

Iterable theCollection = Lists.newArrayList("a", "bc", "def");
    boolean contains = Iterables.any(theCollection, new Predicate() {
    @Override
    public boolean apply(final String input) {
        return input.length() == 1;
    }
});
assertTrue(contains);

альтернативное решение с использованием поиска

Iterable theCollection = Sets.newHashSet("a", "bc", "def");
boolean contains = Iterables.find(theCollection, new Predicate() {
    @Override
    public boolean apply(final String input) {
       return input.length() == 1;
    }
}) != null;
assertTrue(contains);

альтернативное решение применимо только к наборам

Set theCollection = Sets.newHashSet("a", "bc", "def");
boolean contains = !Sets.filter(theCollection, new Predicate() {
    @Override
    public boolean apply(final String input) {
        return input.length() == 1;
    }
}).isEmpty();
assertTrue(contains);

Исключение NoSuchElementException на на когда ничего не найдено

Iterable theCollection = Sets.newHashSet("abcd", "efgh", "ijkl");
Predicate inputOfLengthOne = new Predicate() {
    @Override
    public boolean apply(final String input) {
        return input.length() == 1;
    }
};
String found = Iterables.find(theCollection, inputOfLengthOne);

– это вызовет исключение NoSuchElementException исключение :

java.util.NoSuchElementException
	at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:154)
	at com.google.common.collect.Iterators.find(Iterators.java:712)
	at com.google.common.collect.Iterables.find(Iterables.java:643)

решение : существует перегруженный метод поиска , который принимает возвращаемое значение по умолчанию в качестве аргумента и может быть вызван с null для желаемого поведения:

String found = Iterables.find(theCollection, inputOfLengthOne, null);

удалите все нулевые значения из коллекции

List values = Lists.newArrayList("a", null, "b", "c");
Iterable withoutNulls = Iterables.filter(values, Predicates.notNull());

создайте неизменяемый список/Набор/Карту напрямую

ImmutableList immutableList = ImmutableList.of("a", "b", "c");
ImmutableSet immutableSet = ImmutableSet.of("a", "b", "c");
ImmutableMap imuttableMap = 
    ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3");

создайте неизменяемый список/набор/карту из стандартной коллекции

List muttableList = Lists.newArrayList();
ImmutableList immutableList = ImmutableList.copyOf(muttableList);

Set muttableSet = Sets.newHashSet();
ImmutableSet immutableSet = ImmutableSet.copyOf(muttableSet);

Map muttableMap = Maps.newHashMap();
ImmutableMap imuttableMap = ImmutableMap.copyOf(muttableMap);

альтернативное решение с использованием конструкторов

List muttableList = Lists.newArrayList();
ImmutableList immutableList = 
    ImmutableList. builder().addAll(muttableList).build();

Set muttableSet = Sets.newHashSet();
ImmutableSet immutableSet = 
    ImmutableSet. builder().addAll(muttableSet).build();

Map muttableMap = Maps.newHashMap();
ImmutableMap imuttableMap = 
    ImmutableMap. builder().putAll(muttableMap).build();

3. Больше Кулинарных книг из Гуавы

Гуава – это всеобъемлющая и фантастически полезная библиотека-вот еще несколько API, описанных в форме кулинарной книги:

  • Гуава Заказывает Кулинарную книгу

  • Функциональная Кулинарная книга из Гуавы

Наслаждаться.

4. Движение Вперед

Как я уже упоминал в начале, я экспериментирую с этим другим форматом – кулинарной книгой – чтобы попытаться собрать простые общие задачи по использованию коллекций гуавы в одном месте. Основное внимание в этом формате уделяется простоте и скорости, поэтому большинство рецептов не имеют никаких дополнительных объяснений, кроме самого примера кода .

Наконец – я смотрю на это как на живой документ – Я буду продолжать добавлять рецепты и примеры по мере их появления. Не стесняйтесь сообщать больше в комментариях, и я постараюсь включить их в кулинарную книгу.

Реализация всех этих примеров и фрагментов кода может быть найдена на GitHub – это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.