• Java8 使用 stream().map()提取List对象的某一列值及排重


    Java8 使用 stream().map()提取List对象的某一列值及排重

     

    List对象类(StudentInfo)

    public class StudentInfo implements Comparable<StudentInfo> {

    //名称
    private String name;

    //性别 true男 false女
    private Boolean gender;

    //年龄
    private Integer age;

    //身高
    private Double height;

    //出生日期
    private LocalDate birthday;

    public StudentInfo(String name, Boolean gender, Integer age, Double height, LocalDate birthday){
    this.name = name;
    this.gender = gender;
    this.age = age;
    this.height = height;
    this.birthday = birthday;
    }

    public String toString(){
    String info = String.format("%s %s %s %s %s",this.name,this.gender.toString(),this.age.toString(),this.height.toString(),birthday.toString());
    return info;
    }

    public static void printStudents(List<StudentInfo> studentInfos){
    System.out.println("[姓名] [性别] [年龄] [身高] [生日]");
    System.out.println("----------------------------------------------------------");
    studentInfos.forEach(s->System.out.println(s.toString()));
    System.out.println(" ");
    }

    @Override
    public int compareTo(StudentInfo ob) {
    return this.age.compareTo(ob.getAge());
    //return 1;
    }

    public String getName() {
    return name;
    }

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

    public Boolean getGender() {
    return gender;
    }

    public void setGender(Boolean gender) {
    this.gender = gender;
    }

    public Integer getAge() {
    return age;
    }

    public void setAge(Integer age) {
    this.age = age;
    }

    public Double getHeight() {
    return height;
    }

    public void setHeight(Double height) {
    this.height = height;
    }

    public LocalDate getBirthday() {
    return birthday;
    }

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

    StudentInfo对象类

    测试数据

    复制代码
    //测试数据,请不要纠结数据的严谨性
    List<StudentInfo> studentList = new ArrayList<>();
    studentList.add(new StudentInfo("李小明",true,18,1.76,LocalDate.of(2001,3,23)));
    studentList.add(new StudentInfo("张小丽",false,18,1.61,LocalDate.of(2001,6,3)));
    studentList.add(new StudentInfo("王大朋",true,19,1.82,LocalDate.of(2000,3,11)));
    studentList.add(new StudentInfo("陈小跑",false,17,1.67,LocalDate.of(2002,10,18)));
    复制代码

    提取某一列(以name为例)

    复制代码
     //输出List
    StudentInfo.printStudents(studentList);
    //从对象列表中提取一列(以name为例)
    List<String> nameList = studentList.stream().map(StudentInfo::getName).collect(Collectors.toList());
    //提取后输出name
    nameList.forEach(s-> System.out.println(s));
    复制代码

    输出结果如下图:

     提取age列并排重(使用distinct()函数)

    //提取前输出
    StudentInfo.printStudents(studentList);
    //从对象列表中提取age并排重
    List<Integer> ageList = studentList.stream().map(StudentInfo::getAge).distinct().collect(Collectors.toList());
    ageList.forEach(a-> System.out.println(a));

    结果如下图:

  • 相关阅读:
    Moya 浅析
    Swift: Alamofire -> http请求 & ObjectMapper -> 解析JSON
    ReactiveCocoa 用法实例
    RACSignal的Subscription深入
    idea 不能编译生成class文件
    idea 右下角不显示git分支
    SSO单点登录的研究
    JVM内存模型简介
    Spring事务处理
    RabbitMQ
  • 原文地址:https://www.cnblogs.com/lykbk/p/dgfdffw45454545.html
Copyright © 2020-2023  润新知