• 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;}
    () -> {}

  • 相关阅读:
    课堂作业(类与对象)
    课堂作业(方法)
    java课堂小作业
    读《大道至简》第二章有感
    课堂作业
    读《大道至简》第一章有感
    "Gun N' Rose" Team学习心得
    Python+Selenium框架版(四)- 框架内封装日志类和浏览器引擎类
    Python+Selenium进阶版(三)- 什么是POM
    Python+Selenium框架版(二)- 简单介绍unittest单元测试框架
  • 原文地址:https://www.cnblogs.com/tenWood/p/11485219.html
Copyright © 2020-2023  润新知