操作Collection集合的一些方法
1. Predicate操作集合 removeIf(Predicate filter)
该方法将批量的删除符合filter的所有元素
Predicate时函数式接口,因此可以用Lambda表达式作为参数
//创建一个集合books
......
//使用Lambda表达式过滤集合
books.removeIf(ele -> (((String)ele).length()) < 10);
2.使用Stream操作集合
独立使用Stream的步骤如下:
- 使用Stream或者XxxStream的builder()方法创建该Stream对应的Builder
- 重复调用builder的add()方法向该流中添加多个元素
- 调用Builder的build()方法获取对应的Stream
- 调用Stream的聚集方法
//对于大部分的聚集方法而言,每个Stream只能执行一次
IntStream is = IntStream.builder()
.add(20)
.add(13)
.add(-2)
.add(18)
.build();
//下面调用的聚集方法每次只能执行一行
System.out.println("is所有元素的最大值:" + is.max().getAsInt());
System.out.println("is所有元素的最小值:" + is.min().getAsInt());
System.out.println("is所有元素的总和:" + is.sum());
System.out.println("is所有元素的总数:" + is.count());
System.out.println("is所有元素的平均数:" + is.average());;
System.out.println("is所有元素的平方是否都大于20 :"
+ is.allMatch(ele -> ele *ele > 20));
System.out.println("is是否包含任何元素的平方大于20:"
+ is.anyMatch(ele -> ele * ele > 20));
//将is映射成为一个新的Stream,新Stream的每个Stream是原Stream元素的2倍加1
IntStream newIs = is.map(ele -> ele * 2 + 1);
//使用方法引用的方式来遍历集合元素
newIs.forEach(System.out::println);
聚集操作分为中间的和末端的
5. 中间方法 中间方法的返回值是另一个流
6. 末端方法 :执行末端方法后该流将会被消耗不可再用
Collection接口提供了一个stream()的默认方法,该方法可以返回该集合对应的流
//创建books集合
....
//统计书名中包含"疯狂"子串的图书数量
System.out.println(books.stream()
.filter(ele -> ((String)ele).contains("疯狂"))
.count());
//先调用Collection的Stream()方法将集合转换成为Stream
//再调用Stream的mapToInt方法获取原有Stream对应的IntStream
books.stream().mapToInt(ele -> ((String)ele).length())
.forEach(System.out::println);