自学内容网 自学内容网

深入理解Java中Stream流常用方法及示例


一、介绍

Java 8引入的Stream API为处理集合数据提供了一种更为优雅和便捷的方式。Stream流提供了一系列丰富的方法,能够帮助我们轻松地进行数据操作和处理。在本文中,我们将介绍Java Stream流的常见方法,并通过具体的示例来演示它们的用法。

二、举例说明

1. filter方法

filter方法用于过滤流中的元素,只保留满足特定条件的元素。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eva");

List<String> result = names.stream()
                          .filter(name -> name.startsWith("A"))
                          .collect(Collectors.toList());

System.out.println(result); // 输出:[Alice]

2. map方法

map方法用于对流中的每个元素进行映射操作,将元素转换为另一种形式。

List<String> names = Arrays.asList("apple", "banana", "cherry");

List<Integer> lengths = names.stream()
                            .map(String::length)
                            .collect(Collectors.toList());

System.out.println(lengths); // 输出:[5, 6, 6]

3. sorted方法

sorted方法用于对流中的元素进行排序。

List<String> names = Arrays.asList("Charlie", "Alice", "Bob");

List<String> sortedNames = names.stream()
                               .sorted()
                               .collect(Collectors.toList());

System.out.println(sortedNames); // 输出:[Alice, Bob, Charlie]

4. forEach方法

forEach方法对流中的每个元素执行指定的操作。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

names.stream()
     .forEach(System.out::println);

输出:

Alice
Bob
Charlie

5. reduce方法

reduce方法用于将流中的所有元素归约为单个值。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

int sum = numbers.stream()
                .reduce(0, Integer::sum);

System.out.println(sum); // 输出:15

6. collect方法

collect方法用于将流中的元素收集到集合中。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

Set<String> nameSet = names.stream()
                          .collect(Collectors.toSet());

System.out.println(nameSet); // 输出:[Alice, Bob, Charlie]

当涉及到Java Stream流的使用时,除了上述常用方法外,还有许多其他有用的方法可以帮助进行更复杂和高效的数据处理。接下来,我们将继续介绍一些常见的Java Stream流方法,并附上相应的示例代码。

7. flatMap方法

flatMap方法用于将多个流合并成一个流,常用于处理嵌套结构的数据。

List<List<Integer>> numbers = Arrays.asList(
    Arrays.asList(1, 2, 3),
    Arrays.asList(4, 5, 6),
    Arrays.asList(7, 8, 9)
);

List<Integer> flattenedList = numbers.stream()
                                     .flatMap(List::stream)
                                     .collect(Collectors.toList());

System.out.println(flattenedList); // 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

8. anyMatch和allMatch方法

anyMatch方法用于检查流中是否有任意一个元素满足给定条件,而allMatch方法则用于检查流中的所有元素是否都满足给定条件。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

boolean anyMatchGreaterThanThree = numbers.stream()
                                          .anyMatch(num -> num > 3);

boolean allMatchLessThanTen = numbers.stream()
                                     .allMatch(num -> num < 10);

System.out.println(anyMatchGreaterThanThree); // 输出:true
System.out.println(allMatchLessThanTen); // 输出:true

9. findFirst和findAny方法

findFirst方法用于返回流中的第一个元素,而findAny方法则返回流中的任意一个元素。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eva");

Optional<String> firstMatch = names.stream()
                                   .filter(name -> name.startsWith("C"))
                                   .findFirst();

Optional<String> anyMatch = names.stream()
                                 .filter(name -> name.length() == 3)
                                 .findAny();

System.out.println(firstMatch.orElse("No match")); // 输出:Charlie
System.out.println(anyMatch.orElse("No match")); // 输出:Bob (或者其他任意一个满足条件的元素)

10. skip和limit方法

skip方法用于跳过流中的前几个元素,而limit方法则用于限制流中元素的数量。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

List<Integer> skipFirstTwo = numbers.stream()
                                    .skip(2)
                                    .collect(Collectors.toList());

List<Integer> limitToThree = numbers.stream()
                                     .limit(3)
                                     .collect(Collectors.toList());

System.out.println(skipFirstTwo); // 输出:[3, 4, 5]
System.out.println(limitToThree); // 输出:[1, 2, 3]

11. distinct方法

distinct方法用于去除流中的重复元素。

List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 3, 4, 5, 5);

List<Integer> distinctNumbers = numbers.stream()
                                       .distinct()
                                       .collect(Collectors.toList());

System.out.println(distinctNumbers); // 输出:[1, 2, 3, 4, 5]

通过合理地运用以上这些方法,我们可以更加灵活地处理和操作集合数据,从而编写出更为简洁、高效的代码。Java Stream流的强大之处在于其丰富的方法库,能够有效地应对各种数据处理需求,提升开发效率和代码质量。希望本文能帮助您更好地理解和应用Java Stream流。


  • 世界是多姿多彩的,不同的人生经历造就了不同的精彩。
  • 永远保持一颗感恩的心,感激生活中的每一份温暖和美好。
  • 梦想是生命的引擎,坚持追求梦想,才能创造出辉煌的人生。
  • 人生就像一本书,不管过去有多少遗憾,都可以在未来重新书写。
  • 用心倾听,用爱关怀,让世界因你的存在变得更加美好。
  • 做一个乐观向上的人,积极面对生活中的每一个挑战与困难。
  • 做事要脚踏实地,努力奋斗,才能赢得更广阔的天空。
  • 不要因为失败而放弃,因为失败是成功的一部分,只要坚持,终会迎来胜利的曙光。
  • 人生路上有许多选择,但唯有勇敢迈出第一步,才能走向辉煌的未来。
  • 让爱成为你前行的动力,让希望成为你坚持的力量,你将创造出无限可能的人生。

原文地址:https://blog.csdn.net/weixin_46146718/article/details/137639963

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!