Статьи

Guavate: крошечная библиотека, соединяющая Гуаву и Java8

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: