lambda从精通到陌生

1.为什么用lambda

简化我们的操作
举个老栗子
创建一个线程

 new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hh");
            }
        }).start();

以前我们快速创建一个线程要这样
现在用lambda

 new Thread(()-> System.out.println("lambda-->hh")).start();

一个更重要的原因是Java 以后为了更好的函数式编程

2.lambda怎么用

2.1 lambda的使用场景

lambda只能用在函数式接口,函数式接口就是一个接口里面只有一个抽象方法

 * @author  Arthur van Hoff
 * @see     java.lang.Thread
 * @see     java.util.concurrent.Callable
 * @since   JDK1.0
 */
@FunctionalInterface
public interface Runnable {
    /**
     * When an object implementing interface <code>Runnable</code> is used
     * to create a thread, starting the thread causes the object's
     * <code>run</code> method to be called in that separately executing
     * thread.
     * <p>
     * The general contract of the method <code>run</code> is that it may
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
    public abstract void run();
}

可以通过@FunctionalInterface来表示是一个函数式接口
Java 为我们创建了很多常用的函数式接口,不用我们一个一个来创建
四大内置函数式接口
Consumer< T > 消费性 接口: void accept(T t);
Supplier< T > 供给型接口 : T get();
Function< T , R > 函数式接口 : R apply (T t);
Predicate< T > 断言形接口 : boolean test(T t);

2.2 使用

(参数)->{方法体}

 new Thread(()-> { System.out.println("lambda-->hh");}).start();

其实到这就可以熟练的用lambda,但是它还能简化,你说气不气=。=

1.一个参数时可省略()

        Consumer<String> consumer = x -> System.out.println(x);
        consumer.accept("1个参数省略()");

2.方法体只有一条语句省略{}
== 不管它是否需要有返回值==

       Function<Integer,Integer> function= x-> x;
        Integer apply = function.apply(1);
        System.out.println(apply);

3.类型推断
lambda 表达式的参数类型可省略不写
聪明的你肯定发现了为什么参数 不需要写类型,为什么不需要,Java会根据泛型来推断
你也可以指定参数的类型,但是没必要
在这里插入图片描述

        Consumer<String> consumer = (String x) -> System.out.println(x);

3.方法引用

    System.out.println("呼呦呦");
    
    public void println(String x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

println是一个参数没有返回
这和Consumer 消费者接口很符合啊,下面这样写可不可以简化啊(就nm事多)

   Consumer<String> consumer = x -> System.out.println(x);

简化版

        Consumer<String> consumer1 = System.out::println;

方法引用 参数与返回值需要一致

    /**
     * 方法引用  如果lambda体中有方法已经实现,我们可以使用 方法引用   参数与返回值需要一致
     * <p>
     * 主要有3种
     * 对象::实例方法
     * 类::静态方法
     * 类::实例方法
     * <p>
     * 构造器引用
     * 调用的构造方法与传入的参数有关
     * <p>
     * 数组引用
     * Type[]:new;
     */

现在你肯定迷茫了,感觉不经常用到啊,下一篇Java 流Stream

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值