一文带你入门Java Stream流,太强了
发布日期:2021-04-30 21:10:35 浏览次数:139 分类:精选文章

本文共 2900 字,大约阅读时间需要 9 分钟。

Java Stream:高效处理数据的秘密武器

01 创建流

在 Java 8 中,创建 Stream 可以从数组、集合或直接使用 Stream.of() 方法。以下是创建流的几种常见方式:

// 从数组创建流
String[] arr = { "武汉加油", "中国加油", "世界加油" };
Stream
stream = Arrays.stream(arr);
// 或者直接使用 Stream.of()
Stream
stream = Stream.of("武汉加油", "中国加油", "世界加油");
// 从集合创建流
List
list = new ArrayList<>();
list.add("武汉加油");
list.add("中国加油");
list.add("世界加油");
Stream
stream = list.stream();

需要注意的是,Stream.of() 内部实际上调用了 Arrays.stream() 方法。

如果需要并行处理,可以使用 parallelStream() 方法:

List
aList = new ArrayList<>();
Stream
parallelStream = aList.parallelStream();

02 操作流

Stream 提供了丰富的操作方法,主要分为中间操作和终端操作。中间操作返回新的 Stream,终端操作执行实际操作并返回结果。常用的中间操作包括过滤、映射等,终端操作则包括计数、归并等。

1. 过滤

使用 filter() 方法可以从流中筛选出符合条件的元素。

List
list = new ArrayList<>();
list.add("周杰伦");
list.add("王力宏");
list.add("陶喆");
list.add("林俊杰");
Stream
stream = list.stream()
.filter(element -> element.contains("王"));
stream.forEach(System.out::println);

2. 映射

使用 map() 方法可以将流中的元素转换为另一种类型。

List
list = new ArrayList<>();
list.add("周杰伦");
list.add("王力宏");
list.add("陶喆");
list.add("林俊杰");
Stream
stream = list.stream()
.map(String::length);
stream.forEach(System.out::println);

3. 匹配

Stream 提供了三个匹配方法:anyMatch()allMatch()noneMatch()

List
list = new ArrayList<>();
list.add("周杰伦");
list.add("王力宏");
list.add("陶喆");
list.add("林俊杰");
boolean anyMatchFlag = list.stream().anyMatch(element -> element.contains("王"));
boolean allMatchFlag = list.stream().allMatch(element -> element.length() > 1);
boolean noneMatchFlag = list.stream().noneMatch(element -> element.endsWith("沉"));
System.out.println(anyMatchFlag); // true
System.out.println(allMatchFlag); // true
System.out.println(noneMatchFlag); // true

4. 组合

使用 reduce() 方法可以将流中的元素组合起来。

List
list = Arrays.asList(0, 1, 2, 3);
Optional
optional = list.stream()
.reduce((a, b) -> a + b);
Optional
optional1 = list.stream()
.reduce(Integer::sum);
int reduce = list.stream()
.reduce(6, (a, b) -> a + b);
int reduce1 = list.stream()
.reduce(6, Integer::sum);

03 转换流

使用 collect() 方法可以将流转换回集合或其他类型。

List
list = new ArrayList<>();
list.add("周杰伦");
list.add("王力宏");
list.add("陶喆");
list.add("林俊杰");
// 将流转换为数组
String[] strArray = list.stream().toArray(String[]::new);
// 将流映射为长度并收集到列表中
List
list1 = list.stream()
.map(String::length)
.collect(Collectors.toList());
// 将流收集到新的 ArrayList 中
List
list2 = list.stream()
.collect(Collectors.toCollection(ArrayList::new));
// 将流收集到字符串中,元素之间用 ", " 分隔
String str = list.stream()
.collect(Collectors.joining(", "))
.toString();

推荐阅读

如果你对 Java 编程感兴趣,可以参考以下书籍:

  • 入门版:《Head First Java》、《Java 核心技术卷》
  • 进阶版:《Java 编程思想》、《Effective Java》
  • 大牛版:《Java 并发编程》、《深入理解 Java 虚拟机》
  • 通过这些书籍,你可以更好地掌握 Java 的核心知识和高级编程技巧。

    上一篇:灵魂拷问:如何检查Java数组中是否包含某个值 ?
    下一篇:大学最应该学习的 5 门课, 毕业后大厂 Offer 直接拿到手软!

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2026年06月08日 13时15分43秒