这是我参与更文挑战的第17天,活动详情查看: 更文挑战
使用Predicate操作集合
Java8为Collection集合新增了一个removeIf(Predicate filter)方法,该方法会批量删除符合filter的条件的所有元素。该方法需要一个Predicate对象作为参数,也是一个函数式接口,因此可以使用Lambda表达式来作为参数。
来看下例子吧。
public class Main {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);
c.add(2);
c.add(3);
c.add(4);
c.add(5);
//删除集合c中小于3的元素
c.removeIf(obj ->(Integer)obj < 3);
System.out.println(c);
}
}
在编程时,可能会有很多的统计需求,这时我们可以重写Predicate中的test()方法。 来看下面例子
public class Main {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);
c.add(2);
c.add(3);
c.add(4);
c.add(5);
c.add(6);
c.add(7);
c.add(8);
c.add(9);
//利用Predicate的条件,筛选多个统计需求,减少循环代码。
System.out.println(count(c,obj -> (Integer)obj < 3));
System.out.println(count(c,obj -> (Integer)obj < 6));
System.out.println(count(c,obj -> (Integer)obj < 9));
}
public static int count(Collection c , Predicate predicate){
int total = 0;
for(Object i : c){
//使用Predicate的test()方法,判断是否满足条件
if(predicate.test(i)){
total++;
}
}
return total;
}
}
使用Stream操作集合
Stream是一个通用的流接口,除了Stream外还有IntStream、LongStream、DoubleStream,代表元素类型为int,long,double的流。 Java8还对每个流提供了对象的Bulider。
独立使用Stream的步骤为:
使用Stream或XxxStream的bulider类方法创建该Stream对应的的Bulider。
重复调用Bulider的add()方法向该流中添加多个元素。
调用Bulider的bulid()方法获取对应的Stream。
调用Stream的聚集方法。
Stream中有很多聚集方法,对于大部分聚集方法而言只能执行一次,这些方法既可以是“中间的”,也可以是“末端的”。
中间操作允许流保持打开状态,并允许直接调用后续方法,中间方法返回的是一个流。
末端方法是对流的最终操作,当末端方法执行结束时,该流将会被消耗,且不可再用。
下期对Stream的方法进行详解。