• 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中元素做汇总的方法
  • 相关阅读:
    Java设计模式-创建者模式-单例模式
    后端老项目迁移方法
    Geoserver中使用CQL过滤要素
    RxJava 复刻简版之四,线程切换
    Collection和Map
    Unreal Property System (Reflection) 虚幻属性系统(反射)
    Python玫瑰花
    基于PHP+MySQL游戏视频网站的设计与实现
    【Mysql学习笔记】- 2 多表查询
    【课程作业】西瓜书 机器学习课后习题 : 第十二章
  • 原文地址:https://blog.csdn.net/oldzhongyi/article/details/138167662