- 计算元素数量:
- 触发场景:当需要知道流中元素的个数时,会触发
count()
终止操作。
- 示例:
import java.util.stream.Stream;
public class StreamCountExample {
public static void main(String[] args) {
long count = Stream.of(1, 2, 3, 4, 5).count();
System.out.println("元素个数: " + count);
}
}
- 收集结果到集合或其他数据结构:
- 触发场景:当需要将流处理的结果收集到集合(如
List
、Set
)或其他数据结构中时,会触发collect()
终止操作。
- 示例:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamCollectExample {
public static void main(String[] args) {
List<Integer> list = Stream.of(1, 2, 3, 4, 5).collect(Collectors.toList());
System.out.println("收集到的列表: " + list);
}
}
- 查找匹配元素:
- 触发场景:
findFirst()
:当需要找到流中的第一个元素时触发。常用于在有序流中获取第一个满足某些条件的元素。
findAny()
:当需要找到流中的任意一个元素时触发。在并行流中,它可能返回第一个找到的元素,但不一定是流的第一个元素。
- 示例:
import java.util.Optional;
import java.util.stream.Stream;
public class StreamFindExample {
public static void main(String[] args) {
Optional<Integer> first = Stream.of(1, 2, 3, 4, 5).findFirst();
first.ifPresent(System.out::println);
Optional<Integer> any = Stream.of(1, 2, 3, 4, 5).parallel().findAny();
any.ifPresent(System.out::println);
}
}
- 判断流中是否存在匹配元素:
- 触发场景:
anyMatch(Predicate<? super T> predicate)
:当需要判断流中是否至少有一个元素满足给定条件时触发。
allMatch(Predicate<? super T> predicate)
:当需要判断流中所有元素是否都满足给定条件时触发。
noneMatch(Predicate<? super T> predicate)
:当需要判断流中是否没有元素满足给定条件时触发。
- 示例:
import java.util.stream.Stream;
public class StreamMatchExample {
public static void main(String[] args) {
boolean anyMatch = Stream.of(1, 2, 3, 4, 5).anyMatch(n -> n > 3);
boolean allMatch = Stream.of(1, 2, 3, 4, 5).allMatch(n -> n > 0);
boolean noneMatch = Stream.of(1, 2, 3, 4, 5).noneMatch(n -> n < 0);
System.out.println("是否至少有一个元素大于3: " + anyMatch);
System.out.println("是否所有元素都大于0: " + allMatch);
System.out.println("是否没有元素小于0: " + noneMatch);
}
}
- 归约操作:
- 触发场景:当需要将流中的元素组合起来生成一个值时,会触发归约操作,如
reduce()
。它可以用于求和、求积等。
- 示例:
import java.util.Optional;
import java.util.stream.Stream;
public class StreamReduceExample {
public static void main(String[] args) {
Optional<Integer> sum = Stream.of(1, 2, 3, 4, 5).reduce((a, b) -> a + b);
sum.ifPresent(System.out::println);
int product = Stream.of(1, 2, 3, 4, 5).reduce(1, (a, b) -> a * b);
System.out.println("乘积: " + product);
}
}