Java Lambda

概述

它允许我们将一段代码(这段代码可以理解为一个接口的实现)当成参数传递给某个方法,然后进行业务处理。
一种函数式编程风格,通过底层的类型推断方法引用等特性
应用于迭代操作映射操作聚合操作等。
函数式接口:只有一个抽象方法,可以用@FunctionalInterface检查

使用方法

函数式接口 interface
方法:method(params p,interface< T> i){
i.function§
}
调用方法:method(params,lambda表达式:(params)->{})

相当于:interface< T> i=lambda表达式:(params)->{};
i.function§;

快速入门分析

由逗号分隔的参数列表 -> 语句块
参数:显示指定编译器推理:一个时可以省略括号
返回值类型由编译器推理

语句块只有一行,省略花括号和return

常见结构

() -> statement
 arg -> statement 
 (arg) -> statement 
 (arg1, arg2, ...) -> {  body-block }
 (Type1 arg1, Type2 arg2, ...) -> { 
method-body-block;return value; 
}

内置四大核心函数式接口

  1. Consumer< T>:消费型接口
    void accept(T t);
  2. Supplier< T>:供给型接口
    T get();
  3. Function<T,R>:函数型接口
    R apply(T t);
  4. Predicate< T>:断言型接口
    boolean test(T t);

上述接口还有子接口,用于适用参数、返回值不同的情况。

应用案例增强实现

  1. 传统线程简化
new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("hello");
			}
	}).start();
new Thread(()->{
	System.out.println("hello");
}).start();
  1. 简化排序
String[] strArray= {"abcd","ab","abc"};	
Arrays.sort(strArray,new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				return o1.length()-o2.length();
			}
	});
String[] strArray= {"abcd","ab","abc"};	
Arrays.sort(strArray, (s1, s2) -> s1.length() - s2.length());

方法引用

接口的方法实现用已有的方法替代
前提:参数列表和返回值类型一致

  1. 对象::实例方法名
    例如:System.out::println;
    student::getName;
  2. 类::静态方法名
    例如:Integer::compare;
  3. 类::实例方法名(需要:参数列表第一参数是实例方法的调用者,第二参数是实例方法的参数)
    例如:String::equals;

构造器引用

ClassName::new
注意:需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致
例如:Studnet::new

数组引用

Type::new;

例如:String[]::new;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值