当前位置:   article > 正文

Java学习_18_Stream流

Java学习_18_Stream流


前言

博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV17F411T7Ao


一、不可变集合

不可变集合就是长度和内容都不可变的集合

在这里插入图片描述
即直接使用静态方法来创建
在这里插入图片描述
例如:
在这里插入图片描述
在这里插入图片描述
set没有索引,只能通过迭代器或增强for来遍历
并且set集合元素是唯一的,可以用来去重,同时在获取静态set时,要注意其中不可以有重复元素

list和set的of方法底层是可变参数

在这里插入图片描述
细节1:键是不能重复的。
细节2:静态map中最多只能传入10个元素。
map的传入参数都是写死的,做多只有10个,因为想要传入多个不确定数量的键和值,就需要传入键和值两个可变参数,但是可变参数只能只有一个
在这里插入图片描述
细节3:如果需要传递多个可变的键值对,可以直接传入entry对象
(默认使用hashmap)
但是需要注意entry实际上是map的内部类,我们需要先创建一个普通的map集合,然后将其中的entry使用toArry方法转换成一个数组。
在这里插入图片描述
在这里插入图片描述
简化版:
在这里插入图片描述
极简版:
在这里插入图片描述
注意,copyof方法在JDK10以上才能使用。

二、Stream流

思想

stream流就是将数据变成一个流水线上的对象(创造一个流水线),然后依次对其进行操作处理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一步:得到Stream流

在这里插入图片描述

        //获取单列集合的steam流
        ArrayList<String> arrayList = new ArrayList<>();
        Collections.addAll(arrayList, "a", "b", "c", "d","e");

        //获取一条流水线,并把集合放上去
        Stream<String> stream = arrayList.stream();
        //直接打印看看,结果是地址值
        System.out.println(stream);//java.util.stream.ReferencePipeline$Head@776ec8df
        //使用循环打印
        stream.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

        //简化版本
        arrayList.stream().forEach(s -> System.out.println(s));
        
        //获取双列集合的steam流
        HashMap<String, String> hashMap = new HashMap<>();
        //添加数据
        hashMap.put("a", "1");
        hashMap.put("b", "2");
        hashMap.put("c", "3");
        hashMap.put("d", "4");
        hashMap.put("e", "5");
        //获取stream流,注意,map是双列集合,不能直接获取stream流,需要分开成键流和值流
        hashMap.keySet().stream().forEach(s-> System.out.println(s));

        //获取数组的steam流
        int[] nums = {1,2,3,4,5,6,7,8,9,0};

        //使用Arrays工具类转换成stream流
        Arrays.stream(nums).forEach(s-> System.out.println(s));

        //获取零散数据的steam流
        Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

细节:of方法内如果传入的是一个数组变量,最后打印出来的会是该变量的地址值,此时认为传入steam的是该数组变量的地址。

第二步:Stream流的中间方法

在这里插入图片描述
例如:过滤方法
在这里插入图片描述
简写为:
在这里插入图片描述
注意,中间过程(如过滤)不会对原数据产生任何影响。
limit和skip方法:
在这里插入图片描述
去重方法:底层依赖hashcode和equals方法,所以对于自定义类型时需要重写这两个方法。
在这里插入图片描述
在这里插入图片描述

数据类型转换方法:map
在这里插入图片描述
在这里插入图片描述

Stream流的终结方法

v
终结方法的返回值一般是void
在这里插入图片描述
在这里插入图片描述
将数据收集进数组中:
在这里插入图片描述
注意,这是一个函数式方法,其中参数需要是一个具体类型的数组,改写后如下:
在这里插入图片描述
lambda表达式形式:其中value为数组化后数组大小
在这里插入图片描述

将数据收集进集合中:

在这里插入图片描述

在这里插入图片描述
set和list最大的区别是set不可重复(如果出现了重复会自动去重)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:在收集到map中时,不可以使用重复的键,即不存在覆盖功能。
lambda表达式形式:
在这里插入图片描述

总结

流的出现让数据处理从几十行代码缩减到一两行就能实现,简化了很多集合数组的操作。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/1020708
推荐阅读
相关标签
  

闽ICP备14008679号