`
leadtoit
  • 浏览: 63083 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

guava笔记4-Function,Predicate

 
阅读更多

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)

分享到:
评论

相关推荐

    guava-30.0-jre-API文档-中文版.zip

    赠送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-...

    guava-27.0.1-jre-API文档-中文版.zip

    赠送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-...

    guava-25.0-jre-API文档-中文版.zip

    赠送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-...

    guava-28.2-jre-API文档-中文版.zip

    赠送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

    guava-27.0-jre.jar

    guava-29.0-jre-API文档-中英对照版.zip

    赠送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-11.0.2-API文档-中文版.zip

    赠送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...

    guava-20.0-API文档-中文版.zip

    赠送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-28.2-android.jar

    最新版 guava-30.1-jre.jar

    最新版 guava-30.1-jre.jar

    guava-28.2-jre-API文档-中英对照版.zip

    赠送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-29.0-jre-API文档-中文版.zip

    赠送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-27.1-jre

    guava-26.0-android-API文档-中文版.zip

    赠送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文档:...

    guava-24.1-jre-API文档-中英对照版.zip

    赠送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-...

    guava-20.0-API文档-中英对照版.zip

    赠送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-23.0-API文档-中文版.zip

    赠送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文档-中文...

    guava-18.0-API文档-中文版.zip

    赠送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:...

    guava-28.0-android-API文档-中文版.zip

    赠送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文档:...

    guava-26.0-jre.zip

    3. **函数式编程**:Guava支持函数式编程风格,包括Function、Predicate、Transformer等接口,使得代码更简洁,更易于测试和维护。 4. **并发工具**:Guava提供了丰富的并发工具类,如 ListeningExecutorService、...

Global site tag (gtag.js) - Google Analytics