• Stream流


    Stream

    image.png

    image.png

    处理方法就是

    1. 获取流
    2. 中间处理
    3. 流的终结

    image.png

    1. filter是限制条件
    2. foreach是进行遍历

    常见数据类型获取Stream的方法

    list

            List<String> list = new ArrayList<>();
            Collections.addAll(list,"刘德华","古天乐","德玛西亚","艾欧尼亚","德云色");
            Stream<String> stream = list.stream();
            stream.filter(s->s.contains("德")).forEach(System.out::println);
    
    • 1
    • 2
    • 3
    • 4

    set

    Set<String> set = new HashSet<>();  
    Collections.addAll(set,"刘德华","古天乐","德玛西亚","艾欧尼亚","德云色");  
    Stream<String> stream1 = set.stream();  
    stream1.filter(s->s.length()==3).forEach(System.out::println);
    
    • 1
    • 2
    • 3
    • 4

    map

    Map<String, Double> map = new HashMap<>();  
    map.put("古力娜扎",172.3);  
    map.put("迪丽热巴",168.3);  
    map.put("马尔扎哈",166.3);  
    map.put("卡尔扎巴",168.3);  
    //由于map集合不属于collection,所以我们不能直接使用这个Stream流  
    Set<String> set1 = map.keySet();  
    Stream<String> stream2 = set1.stream();  
    Collection<Double> values = map.values();  
    Stream<Double> stream3 = values.stream();
    Set<Map.Entry<String, Double>> entries = map.entrySet();  
    Stream<Map.Entry<String, Double>> stream4 = entries.stream();  
    stream4.filter(s->s.getKey().contains("巴")).forEach(s-> System.out.println(s));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    数组

    String[] views = {"五台山","玄武湖","故宫","蔡明园","夫子庙","灵隐寺","西湖"};  
    Stream<String> stream5 = Arrays.stream(views);  
    Stream<String> views1 = Stream.of(views);
    
    • 1
    • 2
    • 3

    常见的中间方法

    间方法指的是调用完成后会返回新的Stream流,可以继续使用(支持链式编程)

    image.png

    比较难以理解的是
    sort
    对于我们重写的这个sort方法,当我们简略缩写的时候我们
    stream.filter(s->s>30).sorted((Double o1, Double o2)-> (int)(o2-o1)).forEach(s-> System.out.println(s));

    这个return是不在使用的

    distinct,如果是我们自己自定义的对象,如果我们向去除重复的元素我们可以通过重写对象中的equals和hashcode方法来进行书写代码

    map
    map就是让这个流变成它给出的元素的流,比如说一个对象流我们只需要用其中一个属性值,那么我们就可以用这个

    常用的终结方法

    image.png

    max和min都可以重写匿名内部类
    最后这个返回的是optionnal类型的对象,因此我们并不能直接获取,我们要在其后面再加入这个get来实现

            Student student = students.stream().min(((o1, o2) -> o2.getAge() - o1.getAge())).get();
            System.out.println(student);
    
    • 1
    • 2

    收集Stream流:就是把Stream流操作后的结果转回到集合或者数组中去返回。

    就是我们处理的结果,传递到这个集合和数组容器之中去

    Stream流:方便操作集合/数组的手段; 集合/数组:才是开发中的目的。

    image.png

    List<Student> collect = students.stream().filter(s -> s.getAge() > 30).collect(Collectors.toList());  
    System.out.println(collect);
    
    • 1
    • 2

    image.png

    流的注意事项

    流只能收集一次,不能重复使用

  • 相关阅读:
    Nginx - Centos7在线安装Nginx
    金仓数据库KingbaseES客户端编程接口指南-JDBC(9. JDBC 读写分离)
    Java毕业设计心得体会
    HBase高阶(一)基础架构及存储原理
    离线升级:openssh从8.1版本至8.4版本
    【COSBench系列】1. COSBench认识、使用、结果分析
    如何在Microsoft Exchange 2010中安装SSL证书
    Python-数据爬取(爬虫)
    Maven中的继承与聚合
    AI算力反碎片化:世界上最快的统一矩阵乘法
  • 原文地址:https://blog.csdn.net/everything_study/article/details/132724258