• 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中元素做汇总的方法
  • 相关阅读:
    21天打卡挑战学习MySQL——《MySQL表管理》第二周 第五篇
    Yolo v8数据马赛克数据增强代码详解
    [go学习笔记.第十八章.数据结构] 1.基本介绍,稀疏数组,队列(数组实现),链表
    【重走 java 路】数组
    【示波器专题】示波器的类型
    【问题思考总结】NAT的公有地址怎么转换为私有地址?【MAC地址和IP地址的转换】
    ExcelBDD Python指南
    Windows 10 没有【休眠】选项的配置操作
    秒懂Hadoop和Spark联系与区别
    使用python批量的转换图片的格式并保存
  • 原文地址:https://blog.csdn.net/oldzhongyi/article/details/138167662