第15天补充

  • 函数式接口:只有一个抽象方法的接口(可以有私有,默认,和protect的方法)

  • @Override重写的注解

  • @FunctionalInterface(抽象方法的个数大于1个会报错),定义在接口名上面检测是否为函数式接口,源代码里没有实际内容,是个接口的标记

  • 匿名内部类:会生成$的class文件 lambda不会生成 class文件

  • 不确定一个方法中的业务逻辑怎么实现的时候,可以用一个接口封装它的业务逻辑

  • Lambda 作为方法的参数的时候,lambda的返回值给了参数

  • Lambda 作为返回值的时候,返回类型是接口类型,返回的是实现了接口的实现类。

  • Supplier 生产型接口,指定接口的泛型是什么类型,就获取什么类型的数据 方法是get() 返回的是泛型 T;
    数组的排序 获取一个比较器,lambda中嵌套lambda

  • Consumer 消费类型接口,指定接口的泛型是什么类型,就消费什么类型, 方法是accept(T ) 参数是泛型的类型 没有返回值类型。意义是消费一个接口上定义的泛型类型的数据,accept是消费的逻辑实现。把两个消费类型接口当作参数传给方法

    • Andthen 把两个消费者合并,并依次消费。
  • Supplier 生产者的意义是:得到一个想要的XXX类型的数据(跟泛型一致),获取的逻辑是在get()方法里实现的,比如获取一个比较器。实现数组中,求最大值

  • Predicate 断言 方法test()参数是泛型类型的参数,返回类型是boolean test()方法里是判断的逻辑实现。
    如果判断条件有两部分,可以用一个predicate的test逻辑去实现判断。

  • 1.and 两个断言的对象 1.and(2)

  • 2.or 两个断言对象

  • 3.negate() 非(取反)

  • 当方法中的判断条件不确定的时候,可以在方法的接口上用predicate接口的实现类,去实现 判断的逻辑

  • Function(T,R) T参数类型 R返回值类型 R apply(T)

  • andThen 将多个function连接起来 将第一个function 的结果当作第二个function的参数使用,有点像一个命令会执行好几个动作,像外挂的柑橘

  • Arrays.sort(array,comparator) 返回值为void 直接改变原来的字符串,int[] 类型的数组要转化成Integer[]后才能使用new comparator() 的方法

  • 数组的排序

//匿名内部类的实现
Supplier<Comparator<Integer>> supplier = new Supplier<Comparator<Integer>>() {
    @Override
    public Comparator<Integer> get() {
        return new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        };
    }
};
//lambda表达式的实现
Supplier<Comparator<Integer>> supplier = () -> (o1, o2) -> o1 - o2;
  • 从数组中获取最大值:
public static void main(String[] args) {
        int[] arr = {11,33,88,55,876};
        Supplier<Integer> supplier = new Supplier<Integer>() {
            @Override
            public Integer get() {
                int max = arr[0];
                for (int i = 0; i < arr.length; i++) {
                   if(arr[i]>max);
                   max = arr[i];
                }
                return max;
            }
        };
        int max = supplier.get();
        System.out.println(max);
  • 先把字符串小写打印,再把字符串大写打印
    public static void main(String[] args) {
    		//lambad的实现
            fun(str1-> System.out.println(str1.toLowerCase()),str2-> System.out.println(str2.toUpperCase()),"i love YOU!!");
        }
        //方法里传递的是接口类型
        public static void fun(Consumer<String> con1,Consumer<String> con2,String str){
            con1.andThen(con2).accept(str);
        }
    
  • 按格式打印姓名性别:
    public static void main(String[] args) {
        String[] array = { "迪丽热巴,女", "古力娜扎,女", "马尔扎哈,男" };
        Consumer<String> consumer1 = str -> System.out.print(str.split(",")[0]);
        Consumer<String> consumer2 = str-> System.out.println(str.split(",")[1]);
        for (String s : array) {
            consumer1.andThen(consumer2).accept(s);
        }
    }
    
  • 双重判断案例
public static void main(String[] args) {
    String[] array = { "迪丽热巴,女", "古力娜扎,女", "马尔扎哈,男" };
    ArrayList<String> list = getlist(array, s -> {
        String[] str = s.split(",");
        return str[1].equals("女") && str[0].length() == 4;
    });
    System.out.println(list);

}
public static ArrayList<String> getlist(String[] arr, Predicate<String> predicate1){
    ArrayList<String> list = new ArrayList<>();
    for (String s : arr) {
        if(predicate1.test(s)){
            list.add(s);
        }
    }
    return list;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值