lambda表达式
lambda表达式是什么
引用百度百科
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
个人理解:简化了匿名函数的一种语法。
为什么要使用lambda表达式
使用lambda表达式能大量减少开发的代码量,并且能提高效率,java从JDK1.8开发支持lambda表达式。
例:
1 List<String> list = Arrays.asList("aa", "cc", "bb");
2 //不用lambda: Comparator比较器类定义排序规则 排序
3 list.sort(new Comparator<String>() {
4 @Override
5 public int compare(String o1, String o2) {
6 return o1.hashCode() - o2.hashCode();
7 }
8 });
9
10 //使用lambda(好处:缩减了大部分代码)
11 list.sort((o1, o2) -> o1.hashCode() - o2.hashCode());
12
13 System.out.println(list);
我在工作过程中遇到的一些使用lambda表达式
注:下面的例子Person类:name和age属性
1 //普通类型:定义了一个Person类(属性:姓名和年龄)
2 List<Person> persons = Arrays.asList(new Person("zhangsan", 20),
3 new Person("lisi", 18),
4 new Person("wangwu", 50));
5
6 //需求一:按照 人员的年龄进行排序
7 persons.sort((p1, p2) -> p1.getAge() - p2.getAge());
8 System.out.println(persons);
9
10 //需求二:统计出 所有人员的年龄综合,平均值,最大值,最小值
11 System.out.println("年龄总和:" + persons.stream().mapToInt(p -> p.getAge()).sum());
12 System.out.println("年龄平均值:" + persons.stream().mapToInt(p -> p.getAge()).average());
13 System.out.println("年龄最大值:" + persons.stream().mapToInt(p -> p.getAge()).max());
14 System.out.println("年龄最小值:" + persons.stream().mapToInt(p -> p.getAge()).min());
15
16 //第一个元素
17 System.out.println("第一个:" + persons.stream().mapToInt(p -> p.getAge()).findFirst());
18
19 //需求n...
Stream方法
map方法: 能转换集合的类型
1 List<Person> persons = Arrays.asList(new Person("张三", 20),
2 new Person("李四", 18),
3 new Person("王五", 50));
4
5 //Person类转换成Interge类型
6 List<Integer> collect1 = persons.stream().map(p -> {
7 return p.getAge();
8 }).collect(Collectors.toList());
9 System.out.println(collect1);
10
11 //遍历集合,转换成 姓李的人员
12 List<PersonLi> collect2 = persons.stream().map(p -> {
13 PersonLi li = new PersonLi();
14 if(p.getName().indexOf("李") == 0){
15 li.setName(p.getName());
16 li.setAge(p.getAge());
17 return li;
18 }
19 return null;
20 }).filter(pf -> pf != null).collect(Collectors.toList());
21 System.out.println(collect2);
filter: 过滤
1 List<Person> persons = Arrays.asList(new Person("zhangsan", 20),
2 new Person("lisi", 18),
3 new Person("wangwu", 50));
4
5 //只需年龄小于30岁的
6 List<Person> collect = persons.stream().filter(p -> p.getAge() <= 30).collect(Collectors.toList());
7 System.out.println(collect);
8
9 Person person = persons.stream().filter(p -> p.getAge() <= 30).findAny().get();
10 System.out.println(person);
...还有redule方法,等等..(...暂时没用到),有读者用到可以分享一下自己工作中遇到的。