Java的Stream流如何使用

发布时间:2022-05-24 17:25:43 作者:iii
来源:亿速云 阅读:153

Java的Stream流如何使用

Java 8引入了Stream API,它提供了一种高效且声明式的方式来处理集合数据。Stream API允许开发者以函数式编程的风格对数据进行操作,如过滤、映射、排序、聚合等。本文将介绍Java中Stream流的基本使用方法。

1. 什么是Stream?

Stream是Java 8中引入的一个新特性,它代表一个序列的元素,支持顺序和并行处理。Stream本身并不存储数据,而是对数据源(如集合、数组、I/O资源等)进行操作。Stream的操作可以分为两类:

2. 创建Stream

在Java中,可以通过多种方式创建Stream

2.1 从集合创建

List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();

2.2 从数组创建

String[] array = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(array);

2.3 使用Stream.of创建

Stream<String> stream = Stream.of("a", "b", "c");

2.4 使用Stream.generate创建无限流

Stream<String> stream = Stream.generate(() -> "element").limit(10);

2.5 使用Stream.iterate创建无限流

Stream<Integer> stream = Stream.iterate(0, n -> n + 2).limit(10);

3. 中间操作

中间操作是对Stream进行处理的操作,返回一个新的Stream,允许链式调用。

3.1 filter

filter用于过滤元素,保留满足条件的元素。

List<String> list = Arrays.asList("a", "b", "c", "d");
List<String> result = list.stream()
                          .filter(s -> s.startsWith("a"))
                          .collect(Collectors.toList());
// result: ["a"]

3.2 map

map用于将元素转换为另一种形式。

List<String> list = Arrays.asList("a", "b", "c");
List<String> result = list.stream()
                          .map(String::toUpperCase)
                          .collect(Collectors.toList());
// result: ["A", "B", "C"]

3.3 sorted

sorted用于对元素进行排序。

List<String> list = Arrays.asList("c", "a", "b");
List<String> result = list.stream()
                          .sorted()
                          .collect(Collectors.toList());
// result: ["a", "b", "c"]

3.4 distinct

distinct用于去除重复元素。

List<String> list = Arrays.asList("a", "b", "a", "c");
List<String> result = list.stream()
                          .distinct()
                          .collect(Collectors.toList());
// result: ["a", "b", "c"]

3.5 limit

limit用于限制Stream中元素的数量。

List<String> list = Arrays.asList("a", "b", "c", "d");
List<String> result = list.stream()
                          .limit(2)
                          .collect(Collectors.toList());
// result: ["a", "b"]

3.6 skip

skip用于跳过前N个元素。

List<String> list = Arrays.asList("a", "b", "c", "d");
List<String> result = list.stream()
                          .skip(2)
                          .collect(Collectors.toList());
// result: ["c", "d"]

4. 终端操作

终端操作是触发Stream处理并返回结果的操作。

4.1 forEach

forEach用于对每个元素执行操作。

List<String> list = Arrays.asList("a", "b", "c");
list.stream().forEach(System.out::println);
// 输出: a b c

4.2 collect

collect用于将Stream中的元素收集到集合中。

List<String> list = Arrays.asList("a", "b", "c");
List<String> result = list.stream()
                          .collect(Collectors.toList());
// result: ["a", "b", "c"]

4.3 reduce

reduce用于将Stream中的元素组合成一个结果。

List<Integer> list = Arrays.asList(1, 2, 3, 4);
Optional<Integer> result = list.stream()
                               .reduce(Integer::sum);
// result: 10

4.4 count

count用于计算Stream中元素的数量。

List<String> list = Arrays.asList("a", "b", "c");
long count = list.stream().count();
// count: 3

4.5 anyMatch / allMatch / noneMatch

这些操作用于检查Stream中的元素是否满足某个条件。

List<String> list = Arrays.asList("a", "b", "c");
boolean anyMatch = list.stream().anyMatch(s -> s.startsWith("a"));
boolean allMatch = list.stream().allMatch(s -> s.startsWith("a"));
boolean noneMatch = list.stream().noneMatch(s -> s.startsWith("z"));
// anyMatch: true
// allMatch: false
// noneMatch: true

4.6 findFirst / findAny

findFirst返回Stream中的第一个元素,findAny返回任意一个元素。

List<String> list = Arrays.asList("a", "b", "c");
Optional<String> first = list.stream().findFirst();
Optional<String> any = list.stream().findAny();
// first: "a"
// any: "a" 或 "b" 或 "c"

5. 并行流

Stream API支持并行处理,可以通过parallelStream()方法将Stream转换为并行流。

List<String> list = Arrays.asList("a", "b", "c");
list.parallelStream().forEach(System.out::println);

并行流可以充分利用多核处理器的优势,但需要注意线程安全问题。

6. 总结

Java的Stream API提供了一种高效且声明式的方式来处理集合数据。通过中间操作和终端操作的组合,开发者可以轻松地对数据进行过滤、映射、排序、聚合等操作。Stream API不仅简化了代码,还支持并行处理,提高了程序的性能。

在实际开发中,合理使用Stream API可以大大提升代码的可读性和可维护性。希望本文能帮助你更好地理解和使用Java的Stream流。

推荐阅读:
  1. Java中Stream流怎么实现合并操作
  2. 怎么在Java 8中创建Stream流

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java stream

上一篇:如何使用JavaScript实现一个拖拽缩放效果

下一篇:vant中field组件label属性两端对齐问题怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》