Java8很棒,并向JDK添加了一些有用的抽象,这些抽象通过Google出色的Guava commons库在Java社区中得到了普及。 小组讨论表明, 不久将有一个需要Java 8的Guava版本,从而弥合了Guava和Java8之间的鸿沟。 但是,直到这样的时候,我们其余使用Guava + Java8的人都需要一个很小的填充库来处理诸如Collector实现之类的东西,这些东西会产生Guava Immutable集合。
与往常一样, 斯蒂芬· 科尔本( Stephen Colebourne)恰好把这样一个很小的实用程序类放在一起 : 不幸的是,它被埋在Strata内部,对于我所有的项目,我都不想仅仅依靠Strata来达到这一小巧的目的。 另外,我本人也有一些Java8填充方法可以使用家。 因此, 我分叉了Colebourne的Guavate,并将其发布给Maven Central,供其他任何想要将此小巧的填充库添加到其Java8项目中的人使用:
<dependency><groupId>com.github.steveash.guavate</groupId><artifactId>guavate</artifactId><version>1.0.0</version>
</dependency>
每个不可变集合都有收集器实现:
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(以及实现了Entry的Common-Lang3的Pair)中收集地图:
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中):
Iterable<String> values = // ...
Stream<String> streamVals = Guavate.stream(values);
并将Optional转换为零或一个元素的流:
Optional<String> maybe = // ...
Stream<String> stream = Guavate.stream(maybe);
检出GitHub项目页面以跟踪更新或提交带有您自己的Java8附加件的拉取请求:
- https://github.com/steveash/guavate
翻译自: https://www.javacodegeeks.com/2016/07/guavate-tiny-library-bridging-guava-java8.html