📌  相关文章
📜  Java中将列表转换为流的程序(1)

📅  最后修改于: 2023-12-03 15:31:49.394000             🧑  作者: Mango

Java中将列表转换为流的程序

在Java中,我们可以将List转换为Stream来进行处理。Stream是Java 8中引入的一个新特性,它提供了一种流式处理数据的方式,能够大幅提高程序的可读性和可维护性。

List转换为Stream的基本语法

List转换为Stream的语法很简单,只需要调用List的stream()方法即可。例如,我们有一个List类型的列表:

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

我们可以使用以下代码将其转换为一个IntStream:

IntStream stream = list.stream().mapToInt(Integer::intValue);

这段代码首先调用list的stream()方法获取一个Stream,然后使用mapToInt方法将Stream转换为IntStream。

Stream的常用操作

一旦我们将List转换为Stream,就可以使用Stream的各种操作来对数据进行处理。以下是一些常用的操作:

  • filter:过滤掉不满足条件的元素。
  • map:将元素转换为另一种类型。
  • flatMap:将元素转换为一个流,并将所有流合并为一个流。
  • distinct:去重。
  • sorted:排序。
  • limit:限制元素个数。
  • skip:跳过元素个数。
  • reduce:将元素聚合为一个结果。

例如,我们可以使用以下代码,将一个List中的偶数过滤出来:

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

Stream<Integer> stream = list.stream().filter(num -> num % 2 == 0);

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

这段代码首先调用list的stream()方法获取一个Stream,然后使用filter方法过滤掉不满足条件的元素,最后调用forEach方法输出结果。

Stream的延迟执行

需要注意的是,Stream的操作是延迟执行的。也就是说,我们可以先将操作定义好,但是只有在需要时才会真正执行。例如,我们可以使用以下代码:

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

Stream<Integer> stream1 = list.stream().map(num -> {
    System.out.println("map1: " + num);
    return num + 1;
});

Stream<Integer> stream2 = stream1.map(num -> {
    System.out.println("map2: " + num);
    return num + 1;
});

stream2.forEach(System.out::println);

这段代码首先定义了两个map操作,但是只有在forEach操作被调用时才会执行。输出结果为:

map1: 1
map2: 2
3
map1: 2
map2: 3
4
map1: 3
map2: 4
5
map1: 4
map2: 5
6
map1: 5
map2: 6
7

可以看到,每次调用map方法时,都会输出一条日志,但是这些map操作只有在最后的forEach操作被调用时才会被执行。这种延迟执行可以提高程序的效率。

总结

List转换为Stream是Java 8中非常实用的特性。通过使用Stream,我们可以方便地对数据进行过滤、转换、聚合等操作,提高程序的可读性和可维护性。同时,Stream的延迟执行机制也能够提高程序的效率。