lambda表达式常用篇
这里介绍一下lambda表达式,主要是平时写代码常用的
lambda表达式形式其实比较简单的,如下,基本上都这样的,更加具体的,看如下代码
1. () -> statement
2. () -> {statement}
3. () -> statement
4. () -> {statement}
定义一个基本的实体类:
1. package st;
2.
3. /**
4.  * @Description: <br>
5.  * @Date: Created in 2019/9/23 <br>
6.  * @Author: chenjianwen
7.  */
8. public class Userz {
9.
10.    private String phone;
11.    private String name;
12.    private Integer age;
13.
14.    public Userz(){}
15.
16.    public Userz(String phone, String name, Integer age){
17.        this.phone = phone;
18.        this.name = name;
19.        this.age = age;
20.    }
21.
22.    public String getPhone() {
23.        return phone;
24.    }
25.
26.    public void setPhone(String phone) {
27.        this.phone = phone;
28.    }
29.
30.    public String getName() {
31.        return name;
32.    }
33.
34.    public void setName(String name) {
35.        this.name = name;
36.    }
37.
38.    public Integer getAge() {
39.        return age;
40.    }
41.
42.    public void setAge(Integer age) {
43.        this.age = age;
44.    }
45.
46.    @Override
47.    public String toString() {
48.        return "Userz{" +
49.                "phone='" + phone + '\'' +
50.                ", name='" + name + '\'' +
51.                ", age=" + age +
52.                '}';
53.    }
54. }
一、匿名内部类
java arraylist用法1)创建线程的时候,为了快捷方便,经常要使用到匿名内部类,如下这样:
1.    @Test
2.    public void test01(){
3.        new Thread(new Runnable() {
4.            @Override
5.            public void run() {
6.                System.out.println("hello world");
7.            }
8.        }).start();
9.    }
这样已经很简洁了,但是使用lambda表达式还可以更加的简洁的,如下这样:
1.    @Test
2.    public void test02(){
3.        new Thread(() -> System.out.println("hello java")).start();
4.    }
2)在使用比较器Comparator时也可以使用lambda表达式
1. @Test
2.    public void test03(){
3.        List<Userz> userzList = new ArrayList<>();
4.userzList.add(newUserz("130****4555","chen1",12));
5.userzList.add(newUserz("130****4555","chen2",14));
6.userzList.add(newUserz("130****4555","chen3",5));
7.userzList.add(newUserz("130****4555","chen4",67));
8.
9.        System.out.println("排序前");
10.        for(Userz u : userzList){
11.            System.out.String());
12.        }
13.
14.        System.out.println("排序后");
15.        Collections.sort(userzList, new Comparator<Userz>() {
16.            @Override
17.            public int compare(Userz o1, Userz o2) {
18.                Age() - o2.getAge();
19.            }
20.        });
21.        for(Userz u : userzList){
22.            System.out.String());
23.        }
24.    }
其中,这里使用了比较器的:
这里的比较器换成lambda表达式的话,就简便多了,如下:
Collections.sort(userzList, (x,y) -> x.getAge()-y.getAge());
或者这样也可以:
userzList.sort((x,y) -> x.getAge()-y.getAge());
或者这样:
Collections.sort(userzList, Comparatorparing(Userz::getAge));
二、集合操作
1)集合的遍历
平时我们集合的遍历都使用过foreach方法,如下:
1. @Test
2.    public void test04(){
3.        List<String> list = Arrays.asList("a","b","c","hello","girl");
4.        for(String s : list){
5.            System.out.println(s);
6.        }
7.    }
现在有了lambda,就可以使用这种方式:
1.    @Test
2.    public void test04(){
3.        List<String> list = Arrays.asList("a","b","c","hello","girl");
4.        list.forEach(y -> System.out.println(y));
5.    }
或者这样:
1.    @Test
2.    public void test04(){
3.        List<String> list = Arrays.asList("a","b","c","hello","girl");
4.        list.forEach(System.out::println);
5.    }
2)filter()的使用
假如上面的list集合我想筛选出长度大于3的字符串,那该怎么办:
如果不使用lambda表达式,需要foreach遍历在判断,如下:
1.    @Test
2.    public void test06(){
3.        List<String> list = Arrays.asList("a","b","c","hello","girl");
4.        List<String> res = new ArrayList<>();
5.        for(String s : list){
6.            if(s.length() > 3){
7.                res.add(s);
8.            }
9.        }
10.        res.forEach(System.out::println);
11.    }
如果使用lambda表达式,就这样:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。