Java8 великолепен и добавляет некоторые полезные абстракции в JDK, которые нашли популярность в сообществе Java через замечательную библиотеку общедоступных ресурсов Guava от Google. Групповое обсуждение показывает, что скоро будет версия Guava, которая требует Java 8 и закрывает пробел между Guava и Java8. Тем не менее, до этого времени остальным из нас, использующим Guava + Java8, нужна крошечная библиотека shim для таких вещей, как реализация Collector, которая создает коллекции Guava Immutable.
Как всегда, Стивен Колебурн собрал именно такой крошечный служебный класс: Guavate . К сожалению, он похоронен внутри Strata, и для всех моих проектов я не хочу зависеть от Strata только из-за этой крошечной прокладки. Кроме того, у меня есть несколько методов подкладки Java8, которые можно использовать дома. Поэтому я раздобыл Guavate Colebourne и выпустил его для Maven Central для всех, кто хочет добавить эту крошечную библиотеку shim в свои проекты Java8:
1
2
3
4
5
|
< dependency > < groupId >com.github.steveash.guavate</ groupId > < artifactId >guavate</ artifactId > < version >1.0.0</ version > </ dependency > |
Существуют реализации Collector для каждой из коллекций Immutable:
1
2
3
4
5
6
|
List< String > inputs = Lists.newArrayList("a", "b", "c"); ImmutableSet< String > outputs = inputs.stream() .map(String::toUpperCase) .filter(it -> !it.startsWith("b")) .collect(Guavate.toImmutableSet()); // outputs is an immutable set of "a" and "c" |
Есть также несколько удобных методов для сбора на карты из Map.Entry (и пары Common-Lang3, поскольку она реализует Entry):
1
2
3
4
5
6
7
8
9
|
Map< String , Integer> inputs = ImmutableMap.of( "bob", 1, "jon", 2, "mary", 3 ); Map< String ,Integer> outputs = inputs.entrySet().stream() .map(e -> Pair.of(e.getKey().toUpperCase(), e.getValue())) .collect(Guavate.entriesToMap()); // outputs is a map of BOB:1, JON:2, MARY:3 |
Преобразование произвольной итерации в поток (который должен был быть в JDK для начала):
1
2
|
Iterable< String > values = // ... Stream< String > streamVals = Guavate.stream(values); |
и преобразование Необязательного в поток из нуля или одного элемента:
1
2
|
Optional< String > maybe = // ... Stream< String > stream = Guavate.stream(maybe); |
Посетите страницу проекта GitHub, чтобы следить за обновлениями или отправлять запросы извлечения со своими собственными дополнениями Java8:
Ссылка: | Guavate: крошечная библиотека, соединяющая Гуаву и Java8 от нашего партнера по JCG Стива Эша в блоге Many Cups of Coffee . |