Java基础(四)—— 匿名类、函数式接口

Lambda

【匿名类】
Java 中可以实现一个类中包含另外一个类,且不需要提供任何的类名直接实例化。匿名类是不能有名字的类,它们不能被引用,只能在创建时用 new 语句来声明它们。
常见有匿名类实现接口:

new Thread(new Runnable() {
            @Override
            public void run() {
                
            }
        });

在这里插入图片描述注意接口在Java8之后提供了方法实现,即被default关键词修饰的方法。但是default方法不被认为是接口的方法,即在Lambda表达式 时不算在内。

口诀: 拷贝小括号 写死右箭头 落地大括号

Supplier函数式接口

使用Supplier传参可以减少代码的浪费执行,只有有必要时才执行。
在这里插入图片描述

package com.lambda;

import java.util.function.Supplier;

public class SupplierDemo {

    public static String getFirstString(String s1, Supplier<String> s2Supplier){
        if( s1 != null && s1.length() > 0) return s1;
        //只有当s1为null时才通过Supplier函数式接口调用生成s2的方法
        String s2 = s2Supplier.get();
        if( s2 != null && s2.length() > 0) return s2;
        return null;
    }
    public static void main(String[] args) {
        System.out.println(getFirstString("", new Supplier<String>() {
                    public String get() {
                        return makeString();
                    }
                })
        );
        //lambda表达式 写法
        System.out.println(getFirstString("",() -> makeString()));


    }

    private static String makeString() {
        System.out.println("makeString ……");
        return String.format("%d %s", 1, "hello");
    }
}

Consumer

package com.lambda;

import java.util.function.Consumer;

public class ConsumerDemo {

    public static void forEach(int nums[], Consumer<Integer> consumer){
        if( nums == null || consumer == null) return;
        for(Integer num: nums){
            //该函数式接口接受num
            consumer.accept(num);
        }
    }

    public static void main(String[] args) {
        int nums[] = {1, 2, 3, 4, 5};
        forEach(nums, new Consumer<Integer>() {
            //接收到这里
            @Override
            public void accept(Integer integer) {
                System.out.println(integer + 10);
            }
        });
		//lambda 写法
        forEach(nums,integer -> System.out.println(integer + 10));


    }
}

Consumer then

相当于 c1.accept(n) ,c2.accept(n)
在这里插入图片描述

predict

test() 传判断表达式。

在这里插入图片描述

predicate and

两个表达式都要满足。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值