• jdk1.8新特性


    JDK1.8新特性

    Lamdba表达式(函数式编程)

    用法

    ()->{}
    方法参数 方法要实现的内容

    以Lambda语法创建线程和匿名内部类创建线程的区别(显然代码少了很多!):

        //匿名内部类
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello");
            }
        })
        //Lambda表达式,实际就是创建出该接口的实例对象
        new Thread(()->{System.out.println("hello")});
    
    • Lambda返回的是接口的实例对象

    • 有没有参数、参数有多少个、需不需要有返回值、返回值的类型是什么---->选择自己合适的函数式接口

    函数式编程接口

    函数接口,是指内部只有一个抽象方法的接口

    JDK原生就给我们提供了一些函数式编程接口方便我们去使用,下面是一些常用的接口:

    方法引用

    如果函数式接口的实现恰好可以通过调用一个方法来实现,那么我们可以使用方法引用

    分类

    • 静态方法的方法引用

    • 非静态方法的方法引用

    • 构造函数的方法引用

    stream

    是什么

    Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

    这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

    元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

    为什么用
    • 方便并发
    • 代码量少(直接调用API)
    如何使用

    分三步

    1. 创建Stream流
    2. 通过Stream流对象执行中间操作
    3. 执行最终操作,得到结果
    创建流
    /**
     * 返回的都是流对象
     * @param args
     */
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        // 从集合创建
        Stream<String> stream = list.stream();
        Stream<String> stream1 = list.parallelStream();
    
        // 从数组创建
        IntStream stream2 = Arrays.stream(new int[]{2, 3, 5});
    
        // 创建数字流
        IntStream intStream = IntStream.of(1, 2, 3);
    
        // 使用random创建
        IntStream limit = new Random().ints().limit(10);
    
    }
    
    执行中间操作
    String str = "my name is 007";
    Stream.of(str.split(" ")).filter(s->s.length()>2)
    .map(s->s.length()).foreach(System.out::println);
    
    • filter:过滤
    • map:映射
    • parallel:并行处理
    执行最终操作

    懒加载,调用了最终操作的方法,Stream才会执行
    最终操作和中间操作的判断根据返回值:
    中间操作返回的是Stream实例对象

  • 相关阅读:
    【javascript基础】【转】各浏览器对页面外部资源加载的策略
    【javascript基础】【转】javascript模块化、模块加载器初探
    【javascript基础】js线程机制【转】
    【css】【转】那些年我们一起清除过的浮动
    IL入门之旅(三)——Dump对象
    学习TPL(一)
    弱引用应用的注意点
    IL入门之旅(二)——动态包装
    学习TPL(二)
    IL之旅(前言)
  • 原文地址:https://www.cnblogs.com/yks43/p/14393203.html
Copyright © 2020-2023  润新知