zoukankan      html  css  js  c++  java
  • Java 8 新特性之 Stream 流基础体验

    Java 8 新特性之 Stream 流基础体验

    package com.company;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Optional;
    import java.util.function.Predicate;
    import java.util.stream.Stream;
    
    public class Main {
        public static void main(String[] args) {
            learnStream();
        }
    
        public static void emptyLine(){System.out.println();System.out.println();}
    
        public static void learnStream() {
    
            ////首先,创建一个1-6乱序的List
            List<Integer> lists = new ArrayList<>();
            lists.add(4);
            lists.add(3);
            lists.add(6);
            lists.add(1);
            lists.add(5);
            lists.add(2);
    
            //遍历list
            System.out.print("lists数据:");
            for (Integer elem : lists) {
                System.out.print(elem + ",");
            }
    
            emptyLine();
    
            //获取list中的最小值
            System.out.print("list中的最小值:");
            Stream<Integer> stream = lists.stream();
            Optional<Integer> min = stream.min(Integer::compareTo);
            if (min.isPresent()) {
                System.out.println(min.get());
            }
    
            emptyLine();
    
            //获取list中的最大值
            System.out.print("list中的最大值:");
            lists.stream().max(Integer::compareTo).ifPresent(System.out::println);
    
            emptyLine();
    
            //排序
            System.out.print("排序:");
            Stream<Integer> sorted = lists.stream().sorted();
            sorted.forEach(elem -> System.out.print(elem + ","));
    
            emptyLine();
    
            //过滤
            System.out.print("过滤list,只留下大于3的元素:");
            lists.stream().filter(elem -> elem > 3).forEach(elem -> System.out.print(elem + ","));
    
            emptyLine();
    
            //过滤
            System.out.print("过滤list,只留下大于0并且小于4的元素:");
            lists.stream().filter(elem -> elem > 0).filter(elem -> elem < 4).forEach(elem -> System.out.print(elem + ","));
            emptyLine();
            System.out.print("过滤list,只留下大于0并且小于4的元素,并排序:");
            lists.stream().filter(elem -> elem > 0).filter(elem -> elem < 4).sorted(Integer::compareTo).forEach(elem -> System.out.print(elem + ","));
    
            emptyLine();
    
    
            //自定义过滤
            Predicate<Integer> elme1 =(param) -> (param>0);
            Predicate<Integer> elme2 =(param) -> (param<4);
            System.out.print("过滤list,只留下大于0并且小于4的元素,并排序:(使用自定义过滤)");
            lists.stream().filter(elme1).filter(elme2).sorted(Integer::compareTo).forEach(elem -> System.out.print(elem + ","));
    
            emptyLine();
    
            //经过了前面的这么多流操作,我们再来看看List里面的值有没有发生什么改变
            //遍历list
            System.out.print("原来lists数据:");
            for (Integer elem : lists) {
                System.out.print(elem + ",");
            }
    
        }
    }

    结果

      Optional可谓是NullPointException的大杀器啊

      Stream可以只通过一行代码就实现多线程的并行计算。

    中间操作包括:map (mapToInt, flatMap 等)、 filter、distinct、sorted、peek、limit、skip、parallel、sequential、unordered。

    终止操作包括:forEach、forEachOrdered、toArray、reduce、collect、min、max、count、anyMatch、allMatch、noneMatch、findFirst、findAny、iterator。

    关于Stream的每个方法如何使用就不展开了,更详尽的介绍看这篇文章:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/

  • 相关阅读:
    让unidac支持加密的sqlite
    hook api 保护进程
    Delphi实现网页采集
    UNIDAC
    Delphi的视频捕获组件
    删除程序自身
    一种简单的自校验的注册码生成方案以及暗桩方法
    SQL server表字段信息说明
    淘宝API开发(一)简单介绍淘宝API功能接口作用
    淘宝API开发(二)淘宝API接口功能测试
  • 原文地址:https://www.cnblogs.com/angelye/p/9353177.html
Copyright © 2011-2022 走看看