Bootstrap

【Java|Stream流】获取各个数据类型的Stream流

1.Stream流介绍

在 Java 中,Stream 流是一种处理集合数据的高级方式,可以方便地对集合进行各种操作,如过滤、映射、排序、聚合等。

Stream流的使用步骤:

  1. 先得到一条Stream流,并把数据放上去
  2. 利用Stream流中的API进行各种操作
    • 中间方法:方法调用完毕之后,还可以调用其他方法
    • 终结方法:最后一步,调用完毕之后,不能调用其他方法

2.获取Stream流

各个数据类型获取Stream流的方法如下:

image-20240901192218060

2.1单列集合

首先是单列集合获取Stream流:

示例:

    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        Collections.addAll(arrayList, "a", "b", "c", "d", "e", "f");
        // 获取Stream流
        Stream<String> stream = arrayList.stream();
        stream.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
    }

可以使用链式调用进行简化:

    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        Collections.addAll(arrayList, "a", "b", "c", "d", "e", "f");
        arrayList.stream().forEach(s -> System.out.println(s));
    }

2.2双列集合

示例:

    public static void main(String[] args) {
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("k1", "v1");
        hashMap.put("k2", "v2");
        hashMap.put("k3", "v3");
        hashMap.put("k4", "v4");

        // 获取Stream流
        // 方法1
        hashMap.keySet().stream().forEach(e -> System.out.println(e));
        
        // 方法2
        hashMap.entrySet().stream().forEach(e -> System.out.println(e));
    }

运行结果:

image-20240901193241368

2.3数组

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        // 获取Stream流
        Arrays.stream(arr).forEach(e -> System.out.println(e));
    }

运行结果:

image-20240901193728438

除了基本数据类型,引用数据类型也是可以的

2.4零散的数据

public static void main(String[] args) {
    Stream.of(1, 2, 3, 4, 5).forEach(e -> System.out.print(e + " "));
    System.out.println();
    Stream.of("a", "b", "c", "d").forEach(e -> System.out.print(e + " "));
}

注意:这种方式必须要保证数据的类型是一致的

3.Stream.of()方法的注意事项

查看Stream.of()方法的参数可以看到,方法的参数是一个可变参数

image-20240901194301905

可变参数的底层其实就是一个数组

image-20240901194529345

能看到数据打印出来了,但是数组的类型不止是引用数据类型,还有基本数据类型

image-20240901194632014

因此Stream.of()方法的形参可以是一堆零散的数据,也可以是数组,但必须要是引用类型的数组. 如果传递的是基本数据类型的数组,会把整个数组当成一个元素放到Stream流当中

;