java8 lambda 详解

本文深入探讨Java8中Lambda表达式的使用方法及优化技巧,包括接口实现、捕获变量、简化语法等,同时对比Java7的复杂写法,展示Lambda带来的代码简洁性和可读性的提升。

java8 lambda 详解

// @FunctionalInterface

public interface TwoArgsInterface {
void add(int left, int right);
}

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

//https://blog.youkuaiyun.com/aitangyong/article/details/54317539
//https://www.tpyyes.com/a/java/2017/0709/134.html

public class Lambda {
public static void main(String[] args) {

	TwoArgsInterface twoArgs1 = (int a, int b) -> {
		int c = a + b;
		System.out.printf("ret is %d", c);
		System.out.println();// 输出换行
	};
	
	twoArgs1.add(10, 20);
	
	Runnable runnable1 = () -> {
		System.out.println("没有参数");
	};
	runnable1.run();

	int captureValue = 5;

	Student xiaoming = new Student ();

	Runnable runnable2 = () -> {
		// java lambda不能修改被捕获的变量
		// captureValue++;
		int c = captureValue;
		System.out.printf("the c value is %d", c);
		System.out.println();

		xiaoming.name("xiaoming");
	};

	xiaoming.name("xiaohua");
	// captureValue++;

	runnable2.run();

	System.out.printf("the captureValue is %d", captureValue);
	System.out.println();

	Runnable runable3 = () -> System.out.println("runable three");
	runable3.run();

	List<Integer> list = new ArrayList<>();
	list.add(0);
	list.add(1);
	list.add(2);
	list.add(5);
	list.add(4);

	// 直接打印
	list.forEach(System.out::println);

	for (Integer element: list) {
		System.out.println("element is " + element);
	}

	/*
	lambda表达式有各种简化版本,现在我们就学习下一下常见的简化写法。
	1、入参的类型是可以省略的(当然加上也没有问题),因为可以从上下文环境中推断出lambda表达式的参数类型。 
	TwoArgsInterface twoArgs1 = (int a, int b) -> System.out.println("no argument");
	// 省略参数类型
	TwoArgsInterface twoArgs2 = (a, b) -> System.out.println("no argument");
	2、没有入参的时候,比如上面的Runnable接口,直接用()代表无参数。
	Runnable lambdaRunnable = () -> {System.out.println("lambdaRunnable");};
	3、当lambda表达式的参数个数只有一个,可以省略小括号。
	// 完整语法
	OneArgsInterface oneArgs1 = (int a) -> System.out.println("arguments=" + a);
	// 省略参数类型
	OneArgsInterface oneArgs2 = (a) -> System.out.println("arguments=" + a);
	// 最简洁的写法(省略类型和括号)
	OneArgsInterface oneArgs3 = a -> System.out.println("arguments=" + a);
	4、当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。
	// 完整写法
	Runnable runnable1 = () -> { System.out.println("lambdaRunnable"); };
	// 省略大括号和结尾的分号
	*/

	// lambda
	list.forEach((Integer i) -> System.out.println("lambda element i is " + i));
	// lambda
	list.forEach(i -> System.out.println("concise lambda element i is " + i));

	// list.sort((a, b) -> (a > b));

	// a.comparseTo(b) // java自动装箱 将int转换为Integer使用compareTo函数比较大小
	// list.sort((a, b) -> a.compareTo(b)); // sort 简洁写法

	// Collections.sort(list, (a, b) -> a.compareTo(b));

	// java7对list进行排序
	list.sort(new Comparator<Integer>(){
		@Override
		public int compare(Integer a, Integer b) {
			return a.compareTo(b);
		}
	});
	// java7对list进行排序
	Collections.sort(list, new Comparator<Integer>() {
		@Override
		public int compare(Integer a, Integer b){
			return a.compareTo(b);
		}
	});

	list.forEach(i -> System.out.println("sort element is " + i));
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值