• lambda表达式


    一、简单介绍lambda表达式    

    lambda接口满足的条件:接口有且只有一个方法,default方法、static方法除外,@FunctionalInterface会告诉编译器编译的时候判断方法到底是不是一个function的接口,标注了@FunctionalInterface的接口,如果下面方法不满足,会报错。

    java中很多的以前的方法都加了@FunctionalInterface,比如Runnable接口、Comparator

    1.lambda的的语法。
    2.在哪里如何使用lambda。
    3.execute around pattern
    4.Functional interfaces
    5.Method references方法引用
    6.Type interface类型推导。
    7.Composing lambdas 组合lambda表达式。

    lambda可以很清晰的定义、代表一个匿名函数。它没有名字,但是它有一系列的参数,body,返回值类型,也有可能有一系列的异常被抛出。
    匿名的
    函数式的
    可以被传递的
    清晰的。

    二、lambda表达式的语法构成:

    parameter list       arrow    lambda body
    (o1, o2)             ->        o1.getColor().compareTo(o2.getColor());

    三、举例子:      

    Apple.java:

    package com.cy.java8;
    
    import lombok.Data;
    
    @Data
    public class Apple {
    
        private String color;
        private long weight;
    
        public Apple(String color, long weight) {
            this.color = color;
            this.weight = weight;
        }
    }

    LambdaExperssion.java

    package com.cy.java8;
    
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    import java.util.function.Function;
    import java.util.function.Predicate;
    import java.util.function.Supplier;
    
    public class LambdaExperssion {
    
        public static void main(String[] args) {
    
            // 以前怎么写的,比如给Apple排序
            Comparator<Apple> byColor = new Comparator<Apple>() {
                @Override
                public int compare(Apple o1, Apple o2) {
                    return o1.getColor().compareTo(o2.getColor());
                }
            };
    
            List<Apple> appleList = Collections.emptyList();
            appleList.sort(byColor);
    
            // 用lambda表达式
            Comparator<Apple> byColor2 = (o1, o2) -> o1.getColor().compareTo(o2.getColor());
    
            Function<String, Integer> fLambda = s -> s.length();
    
            /**
             * 一步步的简化
             * 去掉花括号
             * 只有1个参数,可以去掉参数列表的括号
             */
            Predicate<Apple> p = (Apple a) -> {
               return a.getColor().equals("green");
            };
            Predicate<Apple> p1 = (Apple a) -> a.getColor().equals("green");
            Predicate<Apple> p2 = a -> a.getColor().equals("green");
    
            //这两个等价
            Predicate<Apple> p3 = a -> a.getColor().equals("green");
            Function<Apple, Boolean> f = a -> a.getColor().equals("green");
    
            Runnable r = () -> {};
    
            Supplier<Apple> s = () -> new Apple("green", 2);
            System.out.println(s.get());
        }
    }

    总结下lambda表达式的语法:
    (parameters) -> expression
    (parameters) -> {statments;}
    () -> {}

  • 相关阅读:
    2020毕业设计选用4412开发板,实战教程,小成果不放过
    学习嵌入式有决心4412再送免费教程
    iTOP4412开发板can测试工具使用文档
    iTOP4412Ubuntu系统源码ubuntu没有声音的解决办法
    修身养性,为人处事100条
    用X++实现有规律分割的长字符串,分别提取(如逗号隔开)
    自定义Dialog中对数组的取值
    Common实现任何Form定位查询转到当前Form种过滤符合条件的数据区域
    用X++得到当前用户是否有某Security Key的权限级别,完整Job演示
    获取table中的系统字段信息
  • 原文地址:https://www.cnblogs.com/tenWood/p/11485219.html
Copyright © 2020-2023  润新知