Java8 Stream 流常用方法合集

  

Java8 Stream 流常用方法合集

Java 8 引入了一种新的抽象数据类型 Stream,它让数据的操作变得更加简单高效。Stream 可以是一组数据的集合、数组等等,它支持多方面的操作,比如过滤、映射、筛选、分组、去重、排序等等。下面将介绍 Java8 Stream 常用的方法。

创建流

  • 从集合创建流:可以将一个集合转换为流,并对流中的元素进行操作。
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
  • 从数组创建流:可以将一个数组转换为流,并对流中的元素进行操作。
int[] arr = {1, 2, 3, 4, 5};
IntStream stream = Arrays.stream(arr);
  • 常量流:可以使用 Stream 类中的静态方法来创建一个常量流。
Stream<String> stream = Stream.of("hello", "world");
  • 无限流:可以使用 Stream 类中的静态方法来创建一个无限流。
Stream<Integer> stream1 = Stream.iterate(0, n -> n + 2);
stream1.limit(5).forEach(System.out::println); // 输出: 0, 2, 4, 6, 8

Stream<Double> stream2 = Stream.generate(Math::random);
stream2.limit(5).forEach(System.out::println); // 输出: 五个 0~1 之间的随机小数

转换操作

  • map() 方法

map() 方法可以将一个流中的每个元素转换为另一个元素。例如,我们可以将一个流中的每个元素平方:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
stream.map(i -> i * i).forEach(System.out::println);
// 输出: 1, 4, 9, 16, 25
  • flatMap() 方法

flatMap() 方法可以将一个流中的每个元素转换为另一个流。例如,我们可以将一个流中的每个元素拆分成字符串数组并且输出:

Stream<String> stream1 = Stream.of("hello", "world");
stream1.flatMap(s -> Arrays.stream(s.split(""))).forEach(System.out::println);
// 输出: h, e, l, l, o, w, o, r, l, d

过滤操作

  • filter() 方法

filter() 方法可以将一个流中的元素按照指定规则过滤掉一部分。例如,我们可以将一个流中的所有偶数过滤出来:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
stream.filter(i -> i % 2 == 0).forEach(System.out::println);
// 输出: 2, 4
  • distinct() 方法

distinct() 方法可以将一个流中的重复元素去重并返回一个新的流。例如,我们可以将一个流中的重复元素去重:

Stream<String> stream1 = Stream.of("hello", "world", "hello");
stream1.distinct().forEach(System.out::println);
// 输出: hello, world

排序操作

sorted() 方法可以将一个流中的元素进行排序并返回一个新的流。例如,我们可以将一个流中的元素按照自然顺序排序:

List<Integer> list = Arrays.asList(4, 3, 6, 1, 5, 2);
Stream<Integer> stream = list.stream();
stream.sorted().forEach(System.out::println);
// 输出: 1, 2, 3, 4, 5, 6

统计操作

  • count() 方法

count() 方法可以返回一个流中元素的个数。例如,我们可以统计一个流中元素的个数:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
long count = stream.count();
System.out.println(count); // 输出: 5
  • reduce() 方法

reduce() 方法可以将一个流中的所有元素按照指定规则归约为一个元素,并返回一个 Optional 类型的结果。例如,我们可以将一个流中的元素求和:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
Optional<Integer> sum = stream.reduce((x, y) -> x + y);
System.out.println(sum.get()); // 输出: 15

以上就是 Java8 Stream 常用的一些方法,如果你想深入了解 Java8 Stream,可以参考 JDK8 中的官方文档。

相关文章