0
点赞
收藏
分享

微信扫一扫

Stream流操作(一)

alanwhy 2024-05-21 阅读 9

1 Stream概述

Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。

Stream可以由数组或集合创建,对流的操作分为两种:

1、中间操作,每次返回一个新的流,可以有多个。(筛选filter、映射map、排序sorted、去重组合skip—limit)

2、终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新的集合或值。(遍历foreach、匹配find–match、规约reduce、聚合max–min–count、收集collect)

另外,Stream有几个特性:

1、stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。

2、stream不会改变数据源,通常情况下会产生一个新的集合或一个值。

3、stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。


2 Stream与传统遍历对比

几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如:

import java.util.ArrayList;
import java.util.List;
 
public class Demo1List {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("小昭");
        list.add("殷离");
        list.add("张三");
        list.add("张三丰");

	List<String> listA = new ArrayList<>();
    for ( String s  : list) {
        if (s.startsWith("张"))
            listA.add(s);
    }

    List<String> listB = new ArrayList<>();
    for (String s: listA) {
        if (s.length() == 3)
            listB.add(s);
    }

    for (String s: listB) {
        System.out.println(s);
    }
}

使用Stream写法

import java.util.ArrayList;

import java.util.List;

  
public class Demo2Steam {

    public static void main(String[] args) {

        List<String> list = new ArrayList<>();

        list.add("张无忌");

        list.add("周芷若");

        list.add("赵敏");

        list.add("小昭");

        list.add("殷离");

        list.add("张三");

        list.add("张三丰");

        list.stream()

                .filter(name -> name.startsWith("张"))

                .filter(name -> name.length() == 3)

                .forEach(name -> System.out.println(name));

    }

}

3 Stream的创建

1、通过 java.util.Collection.stream() 方法用集合创建流

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

// 创建一个顺序流

Stream<String> stream = list.stream();

// 创建一个并行流

Stream<String> parallelStream = list.parallelStream();

2、使用java.util.Arrays.stream(T[] array)方法用数组创建流

int[] array={1,3,5,6,8};
IntStream stream = Arrays.stream(array);

3、使用Stream的静态方法:of()、iterate()、generate()

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);

Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 3).limit(4);
stream2.forEach(System.out::println);

Stream<Double> stream3 = Stream.generate(Math::random).limit(3);
stream3.forEach(System.out::println);


举报

相关推荐

Stream流的基本操作补充

(一)Lambda-Stream流

Stream流

stream流

0 条评论