博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Predicate与filter
阅读量:6411 次
发布时间:2019-06-23

本文共 993 字,大约阅读时间需要 3 分钟。

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

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

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

[java]   
 
  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子类来实现各种常用功能,例如:

  过滤集合中特定的类型:

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

 

2个Predicate“与”和“或”:

 

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

 

非null:

[java]   
 
  1. Predicates.notNull();  

 

用equals来做条件:

[java]   
 
  1. Predicates.equalTo(target);  

 

你可能感兴趣的文章
PostgreSQL缓存
查看>>
iOS开发技巧 - 使用和定制开关控件(UISwitch)
查看>>
音乐闹钟
查看>>
JQuery模板插件jquery.tmpl-动态ajax扩展
查看>>
QT小滑块
查看>>
iis7.5 发布mvc出错的解决办法
查看>>
职称英语
查看>>
用JavaScript生成Android SDK的下载地址(4)——按“API Level”分类
查看>>
SQL Server 自动增长清零
查看>>
多核与云计算
查看>>
C++中的头文件和源文件
查看>>
SQLite在Android中使用
查看>>
Spring 3 MVC And RSS Feed Example
查看>>
【转】Linux 下修改Tomcat使用的JVM内存大小
查看>>
【uTenux实验】事件标志
查看>>
利用Python进行数据分析(15) pandas基础: 字符串操作
查看>>
busybox inetd tftpd
查看>>
函数可重入性及编写规范
查看>>
Scribe应用实例
查看>>
一个通过BackgroundWorker实现WinForm异步操作的例子
查看>>