你好,lambda(初识lambda及其4大核心接口)

lambda表达式,函数式编程,也可称为闭包,java8发布的最重要新特性。
lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

lambda表达式语法格式:

  • param -> experession
  • (x, y) -> {statments;}

lambda新特性

  • 参数类型: 不需要声明参数类型,编译器可以统一识别
  • 参数圆括号: 一个参数无需定义圆括号,多个参数时必须定义圆括号
  • 代码块大括号: 如果主体只有一个语句,就不需要定义大括号
  • 返回值: 如果主体只有一个语句,编译器默认其结果为返回值,定义大括号后需要指定返回一个数值

java内置4大核心接口:

/**
 * java内置4大核心接口
 * 
 * Consumer(T) : 消费型接口
 * 		 void accept(T t);
 * 		 传入泛型T,无返回值
 *
 * Supplier<T> : 供给型接口
 *		 T get();
 *		 无传入参数,返回泛型T
 *
 * Function<T, R> : 函数型接口
 *		 R apply(T t);
 *		 传入泛型T,返回R类型返回值
 *
 * Predicate<T> : 断言型接口
 *		 boolean test(T t);
 *		 传入泛型T,返回boolean类型
 *
 */
public class FourCoreFunction {
	
	public static void main(String[] args) {
		FourCoreFunction f = new FourCoreFunction();
		f.test1();
		f.test2();
		f.test3();
		f.test4();
		f.test5();
	}

	//Consumer(T) : 消费型接口
	public void test1() {
		happy(100D, e -> {
			e -= 100;
			System.out.println(e);
		}); 
	}
	
	public void happy(double money, Consumer<Double> con) {
		con.accept(money);
	}
	
	//Supplier<T> : 供给型接口
	public void test2() {
		int z = 10;
		getNumArr(z, () -> {
			int[] arr = new int[z];
			for (int i=0; i<z; i++) arr[i] = i;
			return arr;
		});
	}
	
	public void test3() {
		getNumList(10, () -> (int)(Math.random()*100));
	}
	

	public void getNumArr(int num, Supplier<int[]> sup) {
		int[] is = sup.get();
		System.out.println(Arrays.toString(is));
	}
	
	public void getNumList(int num, Supplier<Integer> sup) {
		List<Integer> list = new ArrayList<>();
		for (int i=0; i<num; i++) list.add(sup.get());
		System.out.println(Arrays.toString(list.toArray()));
	}
	
	//Function<T, R> : 函数型接口
	public void test4() {
		String str = strHandler("wbx", e -> e.toUpperCase());
		System.out.println(str);
	}
	
	public String strHandler(String str, Function<String, String> f) {
		return f.apply(str);
	}
	
	//Predicate<T> : 断言型接口
	public void test5() {
		String[] strArr = {"Hello", "World", "www", "ok"};
		List<String> list = Arrays.asList(strArr);
		strFilter(list, e -> e.length() > 3);
	}
	
	public void strFilter(List<String> list, Predicate<String> pre) {
		for (String str : list) {
			if (pre.test(str)) {
				System.out.println(str);
			}
		}
	}
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值