zoukankan      html  css  js  c++  java
  • java8_Lambda表达式

    为什么使用 Lambda 表达式

    • Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

    Lambda 表达式

    • 从匿名类到 Lambda 的转换

    • 匿名内部类

    Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello world!");
            }
    };
    
    • Lambda 表达式
    Runnable r2 = () -> System.out.println("Hello world!");
    
    • 原来使用匿名内部类作为参数传递
    TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return Integer.compare(o1.length(),o2.length());
            }
    });
    
    • Lambda 表达式作为参数传递
    TreeSet<String> ts2 = new TreeSet<>(((o1, o2) -> Integer.compare(o1.length(),o2.length())));
    

    Lambda 表达式语法

    • Java8 中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 Lambda 表达式拆分成两部分:
    • 左侧:Lambda 表达式的参数列表
    • 右侧:Lambda 表达式中所需执行的功能,即 Lambda 体。

    语法格式

    • 无参数,无返回值
    () -> System.out.println("Hello Lambda!");
    
    • 有一个参数,并且无返回值
    • 如果只有一个参数,小括号可以省略不写
    x -> System.out.println(x);
    
    • 有两个以上的参数,有返回值,并且 Lambda 体中有多条语句
    Comparator<Integer> com = (x, y) -> {
    			System.out.println("函数式接口");
    			return Integer.compare(x, y);
    		};
    
    • 若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写
    Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
    
    • Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
    (Integer x, Integer y) -> Integer.compare(x, y);
    (x, y) -> Integer.compare(x, y);
    

    Lambda 表达式需要“函数式接口”的支持

    • 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口.可以使用注解 @FunctionalInterface 修饰,可以检查是否是函数式接口

    Java 内置四大核心函数式接口

    函数式接口 参数类型 返回类型 用途
    Cousumer 消费型接口 T void 对类型为T的对象应用操作,包含方法:void accept(T t)
    Supplier 供给型接口 T 返回类型为T的对象,包含方法: T get()
    Function<T,R> 函数型接口 T R 对类型为T的对象应用操作,并返回结果。结果是R类型的对象。包含方法:R apply(T t)
    Predicate 断定型接口 T boolean 确定类型为T的对象是否满足某约束,并返回 boolean 值。包含方法:boolean 值。包含方法 boolean test(T t)

    后学末进,才疏学浅,如有疏误,还望不吝赐教。

  • 相关阅读:
    获取从链接传来的id
    通过域名直接访问Tomcat项目解决方法
    线程与高并发
    阿里云部署javaWeb项目全过程
    前后端分离项目,支持跨域,session不丢失
    python函数
    装饰器
    迭代器和生成器
    C/C++ I/O处理
    C++虚函数
  • 原文地址:https://www.cnblogs.com/ifreeky/p/7680899.html
Copyright © 2011-2022 走看看