Java从入门到放弃(十七)求你学学lambda表达式

1、lambda表达式语法

Java8的lambda表达式简化了java的匿名类,lambda表达式允许你通过表达式来代替功能接口。

		//java8之前创建匿名线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("java8之前");
            }
        });

        //java8之后
        new Thread(() -> System.out.println("java8函数式接口"));

如上代码,语法是:(parameters) ->{ statements; }

  • 参数如果只有一个可省略括号:x -> x+2;
  • 如果主体包含了一个语句,就不需要使用大括号
  • 如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值
2、举个栗子
		List<String> list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
        list.add("f");
        ------遍历------
        //java8之前
        for(String string : list){
            System.out.println(string);
        }
        //java8之后
        list.forEach(a -> System.out.println(a));
        //双冒号操作符
        list.forEach(System.out::println);
        -----
3、函数式接口

Lambda表达式是依赖函数式接口的,Lambda的类型就是函数式接口。java内置了4种函数式接口

接口类型接口参数返回类型用途
消费型接口ConsumerT无返回值对T类型对象应用操作,accept(T)方法
供给型接口SupplierT返回类型为T的对象,get()方法
函数型接口FunctionTR对T类型对象应用操作,返回R型对象,apply(T)方法
断言型接口PredicateTBoolean对T类型对象应用操作,返回Boolean类型,test(T)方法
			----消费型接口----
	public static void main(String[] args) {
        test(100.00,x -> System.out.println("消费:" + x));
    }
    //消费型接口
    public static void test(Double money, Consumer<Double> consumer){
        consumer.accept(money);
    }

			----供给型接口----
	public static void main(String[] args) {
        test(() -> "Supplier");
    }
    //供给型接口
    public static void test(Supplier<String> supplier){
        supplier.get();
    }
    
			----函数型接口----
	public static void main(String[] args) {
        test("123",x -> Integer.valueOf(x));
    }
    //函数型接口
    public static void test(String string,Function<String,Integer> function){
        function.apply(string);
    }
    
			----断言型接口----
	public static void main(String[] args) {
        test(123,x -> x > 100);
    }
    //断言型接口
    public static void test(Integer integer,Predicate<Integer> predicate){
        predicate.test(integer);
    }   
4、自定义函数式接口

函数式接口只有一个抽象方法,所以可以根据Lambda表达式确定方法。

	//FunctionalInterface检查接口是否是一个函数式接口,非必须
	@FunctionalInterface
	public interface MyFunction<T> {
    	T apply();
	}

	public static void main(String[] args) {
        MyFunction<String, Integer> myFunction = x -> String.valueOf(x);
        myFunction.apply(123);
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值