转: http://blog.csdn.net/michaellufhl/article/details/6329823

怎么根据某些条件来过滤Collection的元素?我们可以在循环里面判断元素是否符合条件然后来remove元素。

Guava已经作了这样的功能。例如你要在String的list里面有"a","b","A",要把非大小写a的元素去掉可以这样:

  1. Predicate<String> aPredicate =  new Predicate<String>(){
  2. @Override
  3. public boolean apply(String input) {
  4. if(input.toLowerCase().equals("a"))
  5. return true;
  6. else
  7. return false;
  8. }};
  9. Collection<String> list2 = Collections2.filter(list, aPredicate);

返回的list2就只有"a"和"A"。要注意的是,原来作为参数传入的list里面还是3个元素,并没有因为被调了filter就被去掉了"b"。另外这个方法作的很好的地方就是返回的list2是带有过滤功能的。也就是说如果你调了list2.add("c")这个方法会抛出IllegalArgumentException,如果调集合的removeAll()和clear()方法也只会对符合predicate条件的元素来操作,这个真的很cool!而且返回的集合不支持remove()。

另外Predicates还提供了很多Predicate子类来实现各种常用功能,例如:

过滤集合中特定的类型:

  1. //filter String type in a collection
  2. Predicates.instanceOf(String.class);

2个Predicate“与”和“或”:

  1. Predicates.and(predicate1, predicate2);
  2. Predicates.or(predicate1, predicate2);

非null:

  1. Predicates.notNull();

用equals来做条件:

  1. Predicates.equalTo(target);

Predicate与filter的更多相关文章

  1. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  2. 委托学习续:Action、Func和Predicate

    我们先看一个上一章的委托的例子: using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  3. Spark RDD/Core 编程 API入门系列 之rdd案例(map、filter、flatMap、groupByKey、reduceByKey、join、cogroupy等)(四)

    声明: 大数据中,最重要的算子操作是:join  !!! 典型的transformation和action val nums = sc.parallelize(1 to 10) //根据集合创建RDD ...

  4. 还不了解一下 Java 8 Predicate 函数接口

    同学你好,这里有一份你的未读代码,等你查收. 这篇文章属于 Java 8 教程(LTS)系列教程,点击阅读更多相关文章. Predicate 函数接口同之前介绍的 Function 接口一样,是一个函 ...

  5. Java8 函数式接口 @FunctionalInterface以及常用Consumer<T>、Supplier<T>、Function<T, R>、Predicate<T>总结

    首先看看什么是Lambda 表达式 Lambda是一个匿名函数,我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递):最简单的Lambda表达式可由逗号分隔的参数列表.-> ...

  6. Java8-Consumer、Supplier、Predicate和Function方法总结

    这几个接口都在 java.util.function 包下的,分别是Consumer(消费型).supplier(供给型).predicate(谓词型).function(功能性): 那么,下面,我们 ...

  7. 快速Android开发系列网络篇之Volley

    Volley是Google推出的一个网络请求库,已经被放到了Android源码中,地址在这里,先看使用方法 RequestQueue mRequestQueue = Volley.newRequest ...

  8. Scalaz(55)- scalaz-stream: fs2-基础介绍,fs2 stream transformation

    fs2是scalaz-stream的最新版本,沿用了scalaz-stream被动式(pull model)数据流原理但采用了全新的实现方法.fs2比较scalaz-stream而言具备了:更精简的基 ...

  9. guava函数式编程

    [Google Guava] 4-函数式编程 原文链接 译文链接 译者:沈义扬,校对:丁一 注意事项 截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果.预计JDK8中会有所 ...

随机推荐

  1. 单元测试-mock基础

    本文较短,只是备份一下mock的几个常用基础例子方便复习 目录 介绍mock的使用例子 maven资源 <dependency> <groupId>org.mockito< ...

  2. js获取触发事件的元素

    //获取事件 var e = window.event; //获取元素 obj = e.target || e.srcElement; console.log(e); checkRepeat(e.ta ...

  3. 【bzoj2083】[Poi2010]Intelligence test STL-vector+二分查找

    题目描述 霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列.Lyx很渴望成为霸中智力测试机构的主管,但是他在这个工作上做的并不好,俗话说熟能生巧,他打算做很多练习,所 ...

  4. 【POJ2774】Long Long Message (SA)

    最长公共子串...两个字符串连在一起,中间放一个特殊字符隔开.求出height之后,枚举height,看两个后缀是不是分布于两段字符串..如果是,这个值就可以作为答案.取最大值即可. ; var c, ...

  5. 【线性基】51nod1312 最大异或和&LOJ114 k大异或和

    1312 最大异或和 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题   有一个正整数数组S,S中有N个元素,这些元素分别是S[0] ...

  6. apache 列目录修复

    描述   :Apache默认配置时允许目录浏览.如果目录下没有索引文件,则会出现目录浏览,导致文件信息泄漏. 检测方法:直接访问目录,如果能看到目录下的文件信息,则说明存在目录浏览漏洞 加固方法: 1 ...

  7. 多啦A梦的制作

    小叮当简单颜色单一,操作起来也很容易上手.接下来的一个实例就是用css画出一个多啦A梦,首先将其分为头部,和身体.然后,再根据身体各部分细节进行进一步的具体刻画. 由于最近一直在学习JavaWeb方面 ...

  8. 【UVA10561】Treblecross(SG函数)

    题意:有n个格子排成一行,其中一些格子里面有字符X.两个游戏者轮流操作,每次可以选一个空格,在里面放上字符X. 如果此时有3个连续的X出现,则该游戏者赢得比赛.初始条件下不会有3个X连续出现. 判断先 ...

  9. Introducing “Razor” – a new view engine for ASP.NET

    原文发布时间为:2011-03-24 -- 来源于本人的百度文章 [由搬家工具导入] Razor :  cshtml扩展名,用@代替了那些复杂的“耳朵” <% %>  ne of the ...

  10. 遍历页面所有的Checkbox,显示选中的ID

    原文发布时间为:2009-04-13 -- 来源于本人的百度文章 [由搬家工具导入] 1、 foreach (Control objCtrl in this.Page.Controls[3].Cont ...