zoukankan      html  css  js  c++  java
  • 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;}
    () -> {}

  • 相关阅读:
    jenkins+maven+svn的自动化部署
    python+selenium遇到鼠标悬停不成功可以使用js进行操作
    robot framework环境搭建
    selenium+python定位元素方法
    selenium+python元素操作
    selenium+python等待时间
    selenium+python浏览器窗口的切换
    jmeter学习(七)连接mysql 数据库
    jmeter学习(六)集合点和关联
    jmeter学习(五)参数化
  • 原文地址:https://www.cnblogs.com/tenWood/p/11485219.html
Copyright © 2011-2022 走看看