• day26 java Stream


    ①Stream 自己不会存储元素。
    ②Stream 不会改变源对象。每次处理都会返回一个持有结果的新Stream。
    ③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
    
    说明:可以把Stream想象成一条流(流水线)在流的上面有很多操作(过滤,转换,排序,.....)

    创建StreamAPI

    例1:

    1. static List list = new ArrayList<>();
    2. static {
    3. list.add(10);
    4. list.add(20);
    5. list.add(15);
    6. list.add(19);
    7. list.add(59);
    8. }
    9. @Test
    10. public void test(){
    11. Stream stream = list.stream();
    12. //lambda表达式
    13. stream.forEach(i -> System.out.println(i));
    14. //方法的引用
    15. stream.forEach(System.out::println);
    16. list.stream().forEach(System.out::println);
    17. }

    中间操作API

    例2:

    1. /*
    2. 通过数组创建Stream:
    3. public static Stream stream(T[] array): 返回一个流
    4. */
    5. @Test
    6. public void test3(){
    7. int[] numbers = {12,89,23,65,32};
    8. Arrays.stream(numbers).forEach(System.out::println);
    9. }

    例3:

    1. @Test
    2. public void test(){
    3. Stream stream = list.stream();
    4. //Stream filter(Predicate p)接收 Lambda , 从流中排除某些元素
    5. Stream stream2 = stream.filter(new Predicate() {
    6. @Override
    7. public boolean test(Person person) {//只要分数及格的
    8. return person.score >= 60;
    9. }
    10. });
    11. stream2.forEach(System.out::println);
    12. list.stream().filter(p -> p.score >= 60).forEach(System.out::println);
    13. }

    例3:

    1. @Test
    2. static List list = new ArrayList<>();
    3. public void test3(){
    4. list.stream()
    5. .distinct()//Person重写equals和hashCode方法后是按照内容去重
    6. .limit(2) //获取前2个元素
    7. .forEach(System.out::println);
    8. }

    例4:Comparator

    1. @Test
    2. public void test6(){
    3. list.stream()
    4. //.sorted()//自然排序
    5. .sorted(new Comparator() {//定制排序
    6. @Override
    7. public int compare(Person o1, Person o2) {
    8. return o1.score - o2.score;
    9. }
    10. })
    11. .forEach(System.out::println);
    12. list.stream()
    13. .sorted((o1,o2) -> o1.score - o2.score)
    14. .forEach(System.out::println);
    15. }

    终结操作API

    终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如:List、Integer,甚至是 void。流进行了终止操作后,不能再次使用。

    1booleanallMatch(Predicate p)检查是否匹配所有元素
    2booleananyMatch(Predicate p)检查是否至少匹配一个元素
    3booleannoneMatch(Predicate p)检查是否没有匹配所有元素
    4OptionalfindFirst()返回第一个元素
    5OptionalfindAny()返回当前流中的任意元素
    6longcount()返回流中元素总数
    7Optionalmax(Comparator c)返回流中最大值
    8Optionalmin(Comparator c)返回流中最小值
    9voidforEach(Consumer c)迭代
    10Treduce(T iden, BinaryOperator b)可以将流中元素反复结合起来,得到一个值。返回 T
    11Ureduce(BinaryOperator b)可以将流中元素反复结合起来,得到一个值。返回 Optional
    12Rcollect(Collector c)将流转换为其他形式。接收一个 Collector接口的实现,用于给Stream中元素做汇总的方法
  • 相关阅读:
    Spring对AOP的实现
    MacBooster8全新Mac系统清理优化工具
    金仓数据库 KingbaseES SQL 语言参考手册 (14. SQL语句:COMMIT 到 CREATE LANGUAGE)
    牛客网之SQL100题(6)--时间、日期
    vue3+ts 异步组件的使用
    百度SEO优化策略与经验分享(提升百度排名的8大步骤)
    Oracle工程师离职并回踩:MySQL糟糕透顶,强烈推荐PostgreSQL
    InputMan12.0J、VB.net、imTime
    Docker 一键安装Confluence(已支持最新版本)
    houdini vellum 显卡驱动造成解算崩溃笔记
  • 原文地址:https://blog.csdn.net/oldzhongyi/article/details/138167662