Function和Predicate可以说是Guava最好用的工具了。
Function用于把一种类型的对象转化为另一种类型的对象。
Predicate用于判断某个对象是否符合一定条件。
单用Function和Predicate可能还看不出他的强大,但是配合集合类,就可以极大地简化代码编写。
Function可以配合集合的transform方法,来将一个集合转换为另一个集合。
FluentIterable<Integer> rs = FluentIterable.from(strings) .transform(new Function<String, Integer>() {
public Integer apply(String string) {
return string.length();
}
}));
Predicate可以配合集合的filter方法,将一个集合符合条件的记录重新组成另一个集合。
FluentIterable<String> rs = FluentIterable.from(strings)
.filter(new Predicate<String>() {
public boolean apply(String string) {
return CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string);
}
})
Functions中有些static方法可以快速得到常用的一些函数:
forMap(Map<A, B>) 以map作为函数
compose(Function<B, C>, Function<A, B>) 组合2个函数
constant(T) 返回常量T
identity() 返回值和输入参数相等的函数
toStringFunction() 使用toString方法返回的函数
Predicates中也有一些方法,可以快速得到一些常用的判断:
instanceOf(Class)
assignableFrom(Class)
contains(Pattern)
in(Collection)
isNull()
alwaysFalse()
alwaysTrue()
equalTo(Object)
compose(Predicate, Function)
and(Predicate...)
or(Predicate...)
not(Predicate)
基本上,很多集合的帮助类都提供了filter方法。返回的类型一般都跟传入的是一致的。
Iterables.filter(Iterable, Predicate)
Iterators.filter(Iterator, Predicate)
Collections2.filter(Collection, Predicate)
Sets.filter(Set, Predicate)
Sets.filter(SortedSet, Predicate)
Maps.filterKeys(Map, Predicate)
Maps.filterValues(Map, Predicate)
Maps.filterEntries(Map, Predicate)
Maps.filterKeys(SortedMap, Predicate)
Maps.filterValues(SortedMap, Predicate)
Maps.filterValues(SortedMap, Predicate)
Multimaps.filterKeys(Multimap, Predicate)
Multimaps.filterValues(Multimap, Predicate)
Multimaps.filterEntries(Multimap, Predicate)
注意:Lists没有提供filter方法,因为List没有办法高效的实现get(int)。
可以替代的这样实现filter:Lists.newArrayList(Collections2.filter(list, predicate))
FluentIterable里面还有个更加通用的filter方法:
FluentIterable.filter(Predicate),返回的FluentIterable<E>对象,可以使用集合的工厂方法构造所需要的集合类型。
Iterables 还提供了一些方法来根据Predicate来获取集合的元素:
boolean all(Iterable, Predicate)
boolean any(Iterable, Predicate)
T find(Iterable, Predicate)
T find(Iterable, Predicate, T default)
Optional<T> tryFind(Iterable, Predicate)
indexOf(Iterable, Predicate)
removeIf(Iterable, Predicate)
Iterators也有类似的方法:
Iterators.all(Iterator, Predicate)
Iterators.any(Iterator, Predicate)
Iterators.find(Iterator, Predicate)
Iterators.find(Iterator, Predicate, T default)
Iterators.indexOf(Iterator, Predicate)
Iterators.removeIf(Iterator, Predicate)
FluentIterable也有类似的方法:
FluentIterable.allMatch(Predicate)
FluentIterable.anyMatch(Predicate)
FluentIterable.firstMatch(Predicate)
类似于filter,guava的集合帮助类也提供了transform方法,来转换集合对象。
Iterables.transform(Iterable, Function)
Iterators.transform(Iterator, Function)
Collections2.transform(Collection, Function)
Lists.transform(List, Function)
Lists.transform(List, Function)
Maps.transformValues(Map, Function)
Maps.transformEntries(Map, EntryTransformer)
Maps.transformValues(SortedMap, Function)
Maps.transformEntries(SortedMap, EntryTransformer)
Multimaps.transformValues(Multimap, Function)
Multimaps.transformEntries(Multimap, EntryTransformer)
Multimaps.transformValues(ListMultimap, Function)
Multimaps.transformEntries(ListMultimap, EntryTransformer)
Tables.transformValues(Table, Function)
注意:Sets没有提供transform方法,因为Set没有办法提供高效的contains(Object)实现。
可以替代的这样实现transform:Sets.newHashSet(Collections2.transform(set, function))
EntryTransformer和Function类似,但是提供了EntrySet(key,value)到另一个对象的转换。
类似于filter,FluentIterable里面有更加通用的transform方法
FluentIterable.transform(Function),返回的FluentIterable<E>对象,可以使用集合的工厂方法构造所需要的集合类型。
除了集合类,还有些类可以和Function及Prediction配合使用:
Ordering.onResultOf(Function) 排序后的结果使用函数再做一次转换
Predicates.compose(Predicate, Function) 返回 predicate(function(x))
Equivalence.onResultOf(Function) 使用函数转换后再判断是否相等
Suppliers.compose(Function, Supplier) 对Supplier得到的值做一次转换
Functions.compose(Function, Function) 两次function
下一篇将介绍到的并发类 ListenableFuture 也可以配合Function使用,将ListenableFuture转换为新的ListenableFuture。
Futures.transform(ListenableFuture, Function)
Futures.transform(ListenableFuture, AsyncFunction)
Futures.transform(ListenableFuture, Function, Executor)
Futures.transform(ListenableFuture, AsyncFunction, Executor)
- 浏览: 63043 次
- 性别:
- 来自: 杭州
最新评论
发表评论
-
JDK5,6,7,8各个版本增加的特性
2014-07-18 17:34 948Java5: (2004.10) 1、泛型 Generi ... -
guava笔记14-Reflection
2013-10-23 09:28 709todo -
guava笔记13-Math
2013-10-23 09:28 861Guava针对数学计算,提供了一些很好用的方法,用来完善jd ... -
guava笔记12-EventBus
2013-10-23 09:28 1017JDK从1.0开始就存在Observer和Observab ... -
guava笔记10-IO
2013-10-22 13:41 4150Java中使用IO Stream直接操作文件的,但是当我们 ... -
guava笔记11-Hashing
2013-10-22 13:41 5012一.Guava提供了一些方法帮助我们生成hash值。 主 ... -
guava笔记9-Ranges
2013-10-22 13:38 802很多时候,我们需要表示一个数据范围,可能会这样传参数: i ... -
guava笔记8-Primitives
2013-10-22 13:38 2134Java有8中基本数据类型:byte ,short,int,l ... -
guava笔记7-Networking
2013-10-22 13:41 789todo -
guava笔记6-Strings
2013-10-21 16:22 2543Guava对String提供了四个工具: (1)J ... -
guava笔记5-并发
2013-10-21 16:21 7075一. ListenableFuture是用 ... -
guava笔记3-cache
2013-10-21 16:19 8197缓存的使用有多种方 ... -
guava笔记2-集合
2013-10-21 16:15 3880(1)构造不可变集合 不可变集合的优点:1. 避免别人调 ... -
java强引用,软引用,弱引用,虚引用
2013-09-30 15:03 494todo -
guava笔记1-Optional,Preconditions,Ordering,Objects,ComparisonChain,Throwables
2013-09-26 16:35 2363(1)Optional 标识可以为空的对象。 st ... -
hive的安装与使用
2011-06-19 23:08 1734hive的安装非常简单。官方下载地址是:http: ... -
Java性能分析和bug调试
2011-06-11 18:20 934写的程序效率不高,内存经常溢出,这时候就需要使用一些方法来看下 ... -
log4j学习
2011-04-19 13:38 761以前log4j用的多,但总是有些细节不明白,今天看了下官方文档 ...
相关推荐
赠送jar包:guava-30.0-jre.jar; 赠送原API文档:guava-30.0-jre-javadoc.jar; 赠送源代码:guava-30.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-30.0-jre.pom; 包含翻译后的API文档:guava-30.0-jre-...
赠送jar包:guava-27.0.1-jre.jar; 赠送原API文档:guava-27.0.1-jre-javadoc.jar; 赠送源代码:guava-27.0.1-jre-sources.jar; 赠送Maven依赖信息文件:guava-27.0.1-jre.pom; 包含翻译后的API文档:guava-...
赠送jar包:guava-25.0-jre.jar; 赠送原API文档:guava-25.0-jre-javadoc.jar; 赠送源代码:guava-25.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-25.0-jre.pom; 包含翻译后的API文档:guava-25.0-jre-...
赠送jar包:guava-28.2-jre.jar; 赠送原API文档:guava-28.2-jre-javadoc.jar; 赠送源代码:guava-28.2-jre-sources.jar; 赠送Maven依赖信息文件:guava-28.2-jre.pom; 包含翻译后的API文档:guava-28.2-jre-...
guava-27.0-jre.jar
赠送jar包:guava-29.0-jre.jar; 赠送原API文档:guava-29.0-jre-javadoc.jar; 赠送源代码:guava-29.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-29.0-jre.pom; 包含翻译后的API文档:guava-29.0-jre-...
赠送jar包:guava-11.0.2.jar; 赠送原API文档:guava-11.0.2-javadoc.jar; 赠送源代码:guava-11.0.2-sources.jar; 赠送Maven依赖信息文件:guava-11.0.2.pom; 包含翻译后的API文档:guava-11.0.2-javadoc-API...
赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...
guava-28.2-android.jar
最新版 guava-30.1-jre.jar
赠送jar包:guava-28.2-jre.jar; 赠送原API文档:guava-28.2-jre-javadoc.jar; 赠送源代码:guava-28.2-jre-sources.jar; 赠送Maven依赖信息文件:guava-28.2-jre.pom; 包含翻译后的API文档:guava-28.2-jre-...
赠送jar包:guava-29.0-jre.jar; 赠送原API文档:guava-29.0-jre-javadoc.jar; 赠送源代码:guava-29.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-29.0-jre.pom; 包含翻译后的API文档:guava-29.0-jre-...
guava-27.1-jre
赠送jar包:guava-26.0-android.jar; 赠送原API文档:guava-26.0-android-javadoc.jar; 赠送源代码:guava-26.0-android-sources.jar; 赠送Maven依赖信息文件:guava-26.0-android.pom; 包含翻译后的API文档:...
赠送jar包:guava-24.1-jre.jar; 赠送原API文档:guava-24.1-jre-javadoc.jar; 赠送源代码:guava-24.1-jre-sources.jar; 赠送Maven依赖信息文件:guava-24.1-jre.pom; 包含翻译后的API文档:guava-24.1-jre-...
赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...
赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:guava-23.0.pom; 包含翻译后的API文档:guava-23.0-javadoc-API文档-中文...
赠送jar包:guava-18.0.jar; 赠送原API文档:guava-18.0-javadoc.jar; 赠送源代码:guava-18.0-sources.jar; 包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:...
赠送jar包:guava-28.0-android.jar; 赠送原API文档:guava-28.0-android-javadoc.jar; 赠送源代码:guava-28.0-android-sources.jar; 赠送Maven依赖信息文件:guava-28.0-android.pom; 包含翻译后的API文档:...
3. **函数式编程**:Guava支持函数式编程风格,包括Function、Predicate、Transformer等接口,使得代码更简洁,更易于测试和维护。 4. **并发工具**:Guava提供了丰富的并发工具类,如 ListeningExecutorService、...