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小时内删除。
发表评论