Автор оригинала: Eugen Paraschiv.
1. введение
Эта статья из кулинарной книги организована в небольшие и целенаправленные рецепты и фрагменты кода для использования коллекций в стиле гуавы.
Формат представляет собой растущий список примеров кода без дополнительных пояснений, необходимых – он предназначен для обеспечения простого доступа к обычным функциям API во время разработки.
2. Рецепты
понизьте список<Родительский> до списка<Дочерний>
– примечание : это обходной путь для нековариантных обобщенных коллекций в Java
class CastFunctionimplements Function { @Override public final T apply(final F from) { return (T) from; } } List originalList = Lists.newArrayList(); List theList = Lists.transform(originalList, new CastFunction ());
более простая альтернатива без гуавы – включает 2 операции литья
ListoriginalList = Lists.newArrayList(); List theList = (List ) (List extends Number>) originalList;
добавление итерируемого элемента в коллекцию
Iterableiter = Lists.newArrayList(); Collection collector = Lists.newArrayList(); Iterables.addAll(collector, iter);
проверьте, содержит ли коллекция элементы в соответствии с пользовательским правилом сопоставления
IterabletheCollection = 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);
альтернативное решение с использованием поиска
IterabletheCollection = 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);
альтернативное решение применимо только к наборам
SettheCollection = 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 на на когда ничего не найдено
IterabletheCollection = 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);
удалите все нулевые значения из коллекции
Listvalues = Lists.newArrayList("a", null, "b", "c"); Iterable withoutNulls = Iterables.filter(values, Predicates.notNull());
создайте неизменяемый список/Набор/Карту напрямую
ImmutableListimmutableList = ImmutableList.of("a", "b", "c"); ImmutableSet immutableSet = ImmutableSet.of("a", "b", "c"); ImmutableMap imuttableMap = ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3");
создайте неизменяемый список/набор/карту из стандартной коллекции
ListmuttableList = 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);
альтернативное решение с использованием конструкторов
ListmuttableList = 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, поэтому его должно быть легко импортировать и запускать как есть.