末端方法
末端方法是对流的最终操作。当对某个 Stream 执行末端方法后,该流将会被"消耗" 且不再可用。换句话说就是末端方法一旦调用后就会关闭流,再不能对流进行操作,否则会抛出异常。
方法 | 功能 |
---|---|
forEach(Consumer action) | 遍历流中所有元素,对每个元素执行 action |
toArray() | 将流中所有元素转换为一个数组 |
reduce() | 该方法有三个重载的版本,都用于通过某种操作来合并流中的元素 |
min() | 返回流中所有元素的最小值 |
max() | 返回流中所有元素的最大值 |
count() | 返回流中所有元素的数量 |
anyMatch(Predicate predicate) | 判断流中是否至少包含一个元素符合 Predicate 条件 |
allMatch(Predicate predicate) | 判断流中是否每个元素都符合 Predicate 条件 |
noneMatch(Predicate predicate) | 判断流中是否所有元素都不符合 Predicate 条件 |
findFirst() | 返回流中的第一个元素 |
findAny() | 返回流中的任意一个元素 |
/**
*末端方法练习
*/
public class StreamDemo4 {
public static void main(String[] args) {
List<String> list = Arrays.asList("张麻子","师爷","黄老爷","李东方","阿廖沙");
Stream<String> stream = list.stream();
//流转数组
Object[] objects = stream.toArray();
List<Integer> list1 = Arrays.asList(8,7,6,1,3);
Integer reduce = list1.stream().reduce(6, BinaryOperator.maxBy((o1, o2) -> {
return o1 - o2;
}));
//获取最大值
Optional<Integer> max = list1.stream().max(Integer::compareTo);
//获取最小值
Optional<Integer> min = list1.stream().min(Integer::compareTo);
//统计元素个数
long count = list1.stream().count();
System.out.println(count);
System.out.println(max.get());
System.out.println(min.get());
Optional<String> first = list.stream().findFirst();
System.out.println(first.get());
//返回第一个元素
Optional<String> any = list.stream().findAny();
System.out.println(any.get());
}
}
/**
* 末端方法练习
*/
public class StreamDemo5 {
public static void main(String[] args) {
List<String> list = Arrays.asList("张麻子","师爷","黄老爷","李东方","阿廖沙","让子弹飞");
//只要有1个元素满足条件即可
boolean b = list.stream().anyMatch(t -> {
return t.length() > 3;
});
//所有的元素都满足条件时才会返回true,否则返回false
boolean c = list.stream().allMatch(t -> {
return t.length() >= 2;
});
//所有元素都不满足于条件时才会返回true,只要有1个满足条件就会返回false
boolean d = list.stream().noneMatch(t->{
return t.length()>4;
});
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}