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 提供了一种强大而灵活的方式来处理集合数据,使得代码更加简洁和易于理解。

posted @ 2024-08-12 16:41  三苇渡江  阅读(295)  评论(0)    收藏  举报