Java常用的集合转流处理方法

2021-11-09  本文已影响0人  你家门口的两朵云

我们经常遇到需要对查出来的List集合进行筛选,条件判断,分组等,虽然可以在mapper层控制,但是难免在业务中不能去改dao层,需要自己手动控制
pojo类
Person.java

@Data
public class Person{
    // id
    private int idNum;
    // 名字
    private String name;
    //  地址
    private String address;
    //  年龄
    private int age;
    //  身高
    private String height;
    //  体重
    private String weight;
}

PersonInfo.java

@Data
@Accessors(chain = true) //开启 链式注入
public class PersonInfo {
    // id
    int idNum;
    // 名字
    String name;
    //  地址
    String address;
}

测试类Test

/**
 * Java集合流的一些基本使用(持续完善中...)
 */
public class JustTest {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        Person person ;
        //造数据 begin
        for (int i = 0; i < 100; i++) {
            person = new Person();
            person.setIdNum(i);
            person.setName("张三"+i);
            person.setAge(10+i%4);
            person.setAddress("上海市青浦区");
            person.setHeight("180cm");
            person.setWeight("50kg");
            personList.add(person);
        }
        for (int i = 0; i < 100; i++) {
            person = new Person();
            person.setIdNum(i);
            person.setName("张三"+i);
            person.setAge(20+i%3);
            person.setAddress("上海市青浦区");
            person.setHeight("180cm");
            person.setWeight("50kg");
            personList.add(person);
        }
        for (int i = 0; i < 100; i++) {
            person = new Person();
            person.setIdNum(i);
            person.setName("张三"+i);
            person.setAge(30+i%3);
            person.setAddress("上海市青浦区");
            person.setHeight("180cm");
            person.setWeight("50kg");
            personList.add(person);
        }
        for (int i = 0; i < 100; i++) {
            person = new Person();
            person.setIdNum(i);
            person.setName("张三"+i);
            person.setAge(40+i%4);
            person.setAddress("上海市青浦区");
            person.setHeight("180cm");
            person.setWeight("50kg");
            personList.add(person);
        }
        //造数据 end

        //1.返回key value集合,value是对应key条件的分组;根据pojo的某个字段分组
        Map<Integer, List<Person>> collect = personList.parallelStream().collect(Collectors.groupingBy(Person::getAge, Collectors.toList()));
        //2.筛选出含有person.age==43,并返回封装成List集合;
        List<Person> peopleList = personList.parallelStream().filter(e -> e.getAge == 43).collect(Collectors.toList());
        //3使用map,将Person的的部分数据转存到PersonInfo对象,再封装返回List<PersonInfo>;
        List<PersonInfo> list = personList.parallelStream().map(e -> new PersonInfo().setIdNum(e.getIdNum()).setName(e.getName()).setAddress(e.getAddress())).collect(Collectors.toList());
    }
}

上一篇 下一篇

猜你喜欢

热点阅读