java .stream(). 使用介绍 Streams API
Java 8 引入了 Streams API,它允许我们以声明性方式处理序列的数据。.stream() 是这一API的核心方法,用于从一个数据源(如数组、集合等)创建一个流(Stream)。以下是 .stream() 方法的一些基本使用介绍:
1. 从集合创建流
List<String> myList = Arrays.asList("a", "b", "c"); Stream<String> stream = myList.stream();
2. 从数组创建流
String[] myArray = {"a", "b", "c"}; Stream<String> streamFromArray = Arrays.stream(myArray);
3. 并行流
如果你想要并行处理数据,可以使用 .parallelStream()。
Stream<String> parallelStream = myList.parallelStream();
4. 中间操作
中间操作是从一个流到另一个流的惰性操作,不会立即执行,常见的中间操作包括:
filter(Predicate):过滤出符合条件的元素。map(Function):将每个元素转换成另一种形式。distinct():去除重复的元素。sorted()或sorted(Comparator):对流中的元素进行排序。
stream.filter(s -> s.startsWith("a")) .map(String::toUpperCase) .distinct() .sorted() .forEach(System.out::println);
5. 终端操作
终端操作是实际执行流操作的步骤,常见的终端操作包括:
forEach(Consumer):对流中的每个元素执行操作。count():返回流中元素的总数。reduce(T identity, BinaryOperator):将流中的元素通过某种方式合并成一个值。collect(Collector):将流中的元素收集到一个新集合。
long count = stream.filter(s -> s.startsWith("a")).count(); String joined = stream.map(String::toUpperCase).collect(Collectors.joining(", "));
6. 组合使用
流操作可以组合使用,先进行中间操作,然后执行终端操作。
int sum = myList.stream() .mapToInt(Integer::parseInt) .sum();
7. 使用 Optional 与 Stream
Optional 类型也可以转换成流。
Optional<String> optional = Optional.of("Hello"); Stream<String> optionalStream = optional.stream();
注意事项
- 流操作是懒加载的,只有当终端操作被执行时,中间操作才会被实际执行。
- 流只能被遍历一次,一旦执行了终端操作,流就会关闭。
- 使用并行流时,需要注意线程安全问题。
Streams API 提供了一种强大而灵活的方式来处理集合数据,使得代码更加简洁和易于理解。
浙公网安备 33010602011771号