Lambda方法推导详细解析
什么情况下可以进行方法推导?
- 类的方法(静态方法)
- 对象的方法
- 构造方法
- 自定义函数式接口
范例:
package com.example.study.java8.InterfaceFunction;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
 * 方法推导
 * 什么情况下可以进行方法推导:
 * 1、类的方法(静态方法)
 * 2、对象的方法
 * 3、构造方法
 */
public class MethodReferenceUsageDemoOne {
    public static void main(String[] args) {
        //方法推导,范例一:类的方法
        //原始写法
        Consumer<String> consumer = s-> System.out.println(s);
        genericityConsumer(consumer, "hello");
        //1、进化一
        genericityConsumer(s->System.out.println(s), "world");
        //2、进化二
        genericityConsumer(System.out::println, "nice");
        System.out.println("===========================");
        //方法推导,范例二:类的方法
        List<Apple> list = Arrays.asList(new Apple("red", 10)
                , new Apple("red", 60)
                , new Apple("blue", 40)
                , new Apple("black", 30)
                , new Apple("green", 80)
                , new Apple("blue", 90)
                , new Apple("green", 60)
                , new Apple("green", 50)
                , new Apple("red", 20));
        System.out.println(list);
        list.sort((oneParameter,twoParameter)->oneParameter.getColor().compareTo(twoParameter.getColor()));
        System.out.println(list);
        System.out.println("============排序另一种写法===============");
        //排序另一种写法
        List<Apple> list2= Arrays.asList(new Apple("red", 10)
                , new Apple("red", 60)
                , new Apple("blue", 40)
                , new Apple("black", 30)
                , new Apple("green", 80)
                , new Apple("blue", 90)
                , new Apple("green", 60)
                , new Apple("green", 50)
                , new Apple("red", 20));
        System.out.println(list2);
        list2.sort(Comparator.comparing(Apple::getColor));
        //排序说明:
        //1、匿名内部类
        //2、上面第一种写法
        //3、上面第二种写法
        //代码越来越简单
        System.out.println("===========================");
        //方法推导,范例三:类的方法
        //原始写法
        list.stream().forEach(apple->System.out.println(apple));
        System.out.println("===========================");
        //进化1
        list.stream().forEach(System.out::println);
        System.out.println("===========================");
        //方法推导,范例四:类的方法
        //原始写法
        Integer integer = Integer.parseInt("123");
        System.out.println(integer);
        System.out.println("===========================");
        //进化
        Function<String, Integer> function = Integer::parseInt;
        Integer integerTwo = function.apply("321");
        System.out.println(integerTwo);
        System.out.println("===========================");
        //方法推导,范例五:对象的方法
        BiFunction<String, Integer, Character> stringIntegerCharacterBiFunction = String::charAt;
        Character character = stringIntegerCharacterBiFunction.apply("Hello", 1);
        System.out.println(character);
        System.out.println("===========================");
        //方法推导,范例六:构造方法,1个参数
        Supplier<String> supplier = String::new;
        String str = supplier.get();
        System.out.println(str.getClass());
        System.out.println("===========================");
        //方法推导,范例七:构造方法,2个参数
        //说明:Apple::new; 就是掉构造方法,自动推导参数和类型
        BiFunction<String,Integer,Apple> appleBiFunction = Apple::new;
        Apple apple = appleBiFunction.apply("red", 50);
        System.out.println(apple);
        System.out.println("===========================");
        //方法推导,范例八:构造方法-自定义FunctionalInterface接口,多个参数
        CustomThreeFunctionalInterface<String,Integer,String,ComplexApple> appleSupplier = ComplexApple::new;
        ComplexApple complexApple = appleSupplier.apply("苹果",20,"green");
        System.out.println(complexApple);
    }
    /**
     * 泛型Consumer
     * @param consumer
     * @param t
     * @param <T>
     */
    public static <T> void genericityConsumer(Consumer<T> consumer, T t){
        consumer.accept(t);
    }
}
自定义函数式接口
package com.example.study.java8.InterfaceFunction;
/**
 * 自定义多个参数函数接口,创建对象
 */
@FunctionalInterface
public interface CustomThreeFunctionalInterface<T, U, K, R> {
    R apply(T t, U u, K k);
}
ComplexApple
package com.example.study.java8.InterfaceFunction;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
 * 多个参数,构造方法推导
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ComplexApple {
    private String color;
    private Integer weight;
    private String name;
}
主要讲解了,Lambda方法推导的常见用法。
 
        
       
     
       
           
           
          
评论 (0)