Predicate与filter
Posted 梦想空间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Predicate与filter相关的知识,希望对你有一定的参考价值。
转: http://blog.csdn.net/michaellufhl/article/details/6329823
怎么根据某些条件来过滤Collection的元素?我们可以在循环里面判断元素是否符合条件然后来remove元素。
Guava已经作了这样的功能。例如你要在String的list里面有"a","b","A",要把非大小写a的元素去掉可以这样:
- 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子类来实现各种常用功能,例如:
过滤集合中特定的类型:
- //filter String type in a collection
- Predicates.instanceOf(String.class);
2个Predicate“与”和“或”:
- Predicates.and(predicate1, predicate2);
- Predicates.or(predicate1, predicate2);
非null:
- Predicates.notNull();
用equals来做条件:
- Predicates.equalTo(target);
以上是关于Predicate与filter的主要内容,如果未能解决你的问题,请参考以下文章
暂时禁用NSArrayController filterPredicate,还是咨询ManagedObjectContext?
在 NSFetchedResultsController 中使用 Predicate 与 CoreData 进行日期比较
Predicate Format String Syntax 与字面量
431常用的函数式接口-Predicate接口-默认方法and和432常用的函数式接口-Predicate接口-默认方法or&negate