java lamda 常用写法 List篇

一、背景

  • 公司同事都在用lamda,自己一直没有尝试去用,感觉好low,尤其在代码审核的时候,感觉到尴尬

  • 话不多说,下面是List lamda常用操作写法

二、List常用操作

1. 遍历

  • 注:需要运行测试的同学到第三章copy源码运行
  • persons为一个List集合,Person对象可查看文章最后源码
  • 每个person的name后面都加一个at符号
    	persons.forEach(person -> {
            person.setName(person.getName() + "@");
        });
    

2. 过滤

  • 把上海的person过滤出来
       List<Person> personsFiltered = persons.stream().filter(person -> {
           return "上海".equals(person.getCity());
       }).collect(Collectors.toList());
    

3. 排序

  • 按生日从小到大排序
        List<Person> personsSorted = persons.stream().sorted((a, b) -> {
            return (int) (a.getBirthday().getTime() - b.getBirthday().getTime());
        }).collect(Collectors.toList());
    

4. 按属性分组

  • 按城市分组
         Map<String, List<Person>> cityGroup = persons.stream()
                 .collect(Collectors.groupingBy(Person::getCity));
    

5. 自定义分组

  • 北京与广州合并为一个北广分组

         Map<Object, List<Person>> cityGroupSelf = persons.stream()
                 .collect(Collectors.groupingBy(person -> {
                     if ("北京".equals(person.getCity()) || "广州".equals(person.getCity())) {
                         return "北广";
                     } else {
                         return person.getCity();
                     }
                 }));
         });
    

三、完整源码

  • 给的都是自己写的、可运行的良心代码
package lanxing.future.lamda;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author <a href="mailto:[email protected]">lanxing</a>
 * @version 2019年3月7日
 *
 */
public class Test {
    public static void main(String[] args) {
        List<Person> persons = new ArrayList<>();
        Person person1 = new Person("a", new Date(1268318348000L), "上海");
        Person person2 = new Person("b", new Date(952785548000L), "北京");
        Person person3 = new Person("c", new Date(700324748000L), "上海");
        Person person4 = new Person("d", new Date(1268318348000L), "广州");

        persons.add(person1);
        persons.add(person2);
        persons.add(person3);
        persons.add(person4);

        // List遍历 (每个name后面都加一个@)
        persons.forEach(person -> {
            person.setName(person.getName() + "@");
        });
        persons.forEach(person -> {
            System.out.println(person.getName());
        });

        // 过滤(把上海的person打印出来)
        List<Person> personsFiltered = persons.stream().filter(person -> {
            return "上海".equals(person.getCity());
        }).collect(Collectors.toList());

        personsFiltered.forEach(person -> {
            System.out.println(person.getName() + ":" + person.getCity());
        });

        // 排序 (按生日,从小到大)
        List<Person> personsSorted = persons.stream().sorted((a, b) -> {
            return (int) (a.getBirthday().getTime() - b.getBirthday().getTime());
        }).collect(Collectors.toList());

        personsSorted.forEach(person -> {
            System.out.println(person.getName() + ":" + person.getBirthday());
        });

        // 按属性分组(按城市分)
        Map<String, List<Person>> cityGroup = persons.stream()
                .collect(Collectors.groupingBy(Person::getCity));
        cityGroup.forEach((key, value) -> {
            System.out.println("============分组:" + key);
            value.forEach(person -> {
                System.out.println(person.getName() + "-" + person.getCity());
            });
        });

        // 自定义分组(北京与广州作为一个北广分组)
        Map<Object, List<Person>> cityGroupSelf = persons.stream()
                .collect(Collectors.groupingBy(person -> {
                    if ("北京".equals(person.getCity()) || "广州".equals(person.getCity())) {
                        return "北广";
                    } else {
                        return person.getCity();
                    }
                }));
        cityGroupSelf.forEach((key, value) -> {
            System.out.println("============分组:" + key);
            value.forEach(person -> {
                System.out.println(person.getName() + "-" + person.getCity());
            });
        });
    }

    static class Person {
        private String name;
        private Date birthday;
        private String city;

        public Person() {

        }

        public Person(String name, Date birthday, String city) {
            this.birthday = birthday;
            this.name = name;
            this.city = city;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getCity() {
            return city;
        }

        public void setCity(String city) {
            this.city = city;
        }

        public Date getBirthday() {
            return birthday;
        }

        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }

    }
}

原创文章 20 获赞 21 访问量 3万+

猜你喜欢

转载自blog.csdn.net/lanxing_huangyao/article/details/88412934
今日推荐