Lambda表达式的学习
- 什么是Lambda表达式
- 假设有如下场景,对整数进行排序。
- Lambda表达式常常用于list的排序,过滤,转换,打印,分组
什么是Lambda表达式
Lambada表达式是JDK1.8时候增加的特性,Lambada实际上是一种匿名方法。
假设有如下场景,对整数进行排序。
JDK1.8之前的Java代码:
List<Integer> numbers = Arrays.asList(5, 3, 8, 2, 9);Collections.sort(numbers, new Comparator<Integer>() {public int compare(Integer a, Integer b) {return a.compareTo(b);}
});
这段代码使用的是匿名类的方式,简单说下匿名类的概念,匿名类看名知其意,没有名字的类,哪里需要就在哪里创建并且实例化,常常用于创建实现某个接口的抽象方法(接口中的方法默认都是抽象方法,不用abstract修饰)或继承某个抽象类,重写这个抽象类中的抽象方法。上面的代码中
new Comparator<Integer>() {public int compare(Integer a, Integer b) {return a.compareTo(b);}
就是对Comparator接口中compare方法的实现,所以是匿名类
JDK1.8之后的Java代码使用Lambada表达式来排序:
List<Integer> numbers = Arrays.asList(5, 3, 8, 2, 9);Collections.sort(numbers, (num1, num2) -> Integer.compare(Integer.parseInt(num1), Integer.parseInt(num2)));
Lambda表达式常常用于list的排序,过滤,转换,打印,分组
List<String> list = Arrays.asList("3","123","467","300","89","9");
//排序
Collections.sort(list,(s1,s2)-> Integer.compare(Integer.parseInt(s1),Integer.parseInt(s2)));
//过滤
List<String> list2 = list.stream().filter(s -> s.equals("3")).collect(Collectors.toList());
//转换
List<Integer> list3 = list.stream().map(s -> s.length()).collect(Collectors.toList());
//打印
list3.forEach(s-> System.out.println(s));
//分组
Map<Integer,List<String>> groups = list.stream().collect(Collectors.groupingBy(s -> s.length()));