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 提供了一种强大而灵活的方式来处理集合数据,使得代码更加简洁和易于理解。
标签:java,stream,Stream,元素,myList,API,操作 From: https://www.cnblogs.com/sangwei/p/18355271