COMPLEX-B

导航

Lambda表达式

1.函数式接口:只有一个抽象方法的接口叫函数式接口

存在的意义:方法里面不能直接传方法,所以通过传函数式接口的方式可以间接的实现方法的传递
lambda表达式:对匿名内部类的一种简单的写法常用于实现函数式接口

1.lambda实现Runnable

// Java 8 之前:
	new Thread(new Runnable() {
	@Override
	public void run() {
		System.out.println("Before Java8, too much code for too little to do");
	}
	}).start();
// Java 8 方式:
	new Thread(()->System.out.println("In Java8, Lambda expression rocks !!")).start();

2.lambda实现Compare

		List<Entry<Integer, User>> list = new ArrayList<>();
		for (Entry<Integer, User> entry: map.entrySet())
			list.add(entry);
		list.sort((Entry<Integer, User> o1, Entry<Integer, User> o2) -> {
			return o1.getValue().getAge() - o2.getValue().getAge();
		});

3.steam中Map的用法:对每个值做相应的操作

List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada");
String G7Countries = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", "));

lambda表达式不能修改局部变量,但是可以访问

List<Integer> primes = Arrays.asList(new Integer[]{2, 3,5,7});
int factor = 2;
primes.forEach(element -> { factor++; }); // 错误
primes.forEach(element -> {System.out.println(2)}); // 正确

4.stream中的过滤并返回新的集合

// 创建一个字符串列表,每个字符串长度大于 2
List costBeforeTax = Arrays.asList("abc","bcd","defg","jk");
List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList()); // filter()过滤集合并返回stream,collect()返回集合
System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);

posted on 2019-05-14 14:05  COMPLEX-B  阅读(247)  评论(0编辑  收藏  举报