黑马程序员技术交流社区

标题: 【上海校区】Predicate与filter [打印本页]

作者: 不二晨    时间: 2018-11-2 09:24
标题: 【上海校区】Predicate与filter
怎么根据某些条件来过滤Collection的元素?我们可以在循环里面判断元素是否符合条件然后来remove元素。

  Guava已经作了这样的功能。例如你要在String的list里面有"a","b","A",要把非大小写a的元素去掉可以这样:
[java] view plain copy
Predicate<String> aPredicate =  new Predicate<String>(){  
    @Override  
    public boolean apply(String input) {  
        if(input.toLowerCase().equals("a"))  
            return true;  
        else  
            return false;  
}};  
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] view plain copy
//filter String type in a collection  
Predicates.instanceOf(String.class);  
2个Predicate“与”和“或”:

[java] view plain copy
Predicates.and(predicate1, predicate2);  
Predicates.or(predicate1, predicate2);  
非null:
[java] view plain copy
Predicates.notNull();  
用equals来做条件:
[java] view plain copy
Predicates.equalTo(target);  





---------------------
【转载】
作者:michaellufhl
原文:https://blog.csdn.net/michaellufhl/article/details/6329823



作者: 不二晨    时间: 2018-11-7 09:02
ヾ(◍°∇°◍)ノ゙
作者: 魔都黑马少年梦    时间: 2018-11-8 16:59





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2