Lambda表达式
Posted zhz-8919
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
以上是关于Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章