Stream---对集合中对象中的属性集合中的某个属性值实现去重

前言:

  标题有点绕:直接上图解

       

 

 

 User类

package com.gao.JDK8.Stream流;

import lombok.Data;

import java.util.Date;

@Data
public class User {

    private String name;
    private String pass;
    private Date time;

    public User(String name, String pass, Date time) {
        this.name = name;
        this.pass = pass;
        this.time = time;
    }
}

 

Person类

package com.gao.JDK8.Stream流;

import lombok.Data;

import java.util.List;

@Data
public class Person {

    private String pname;
    private String ppass;
    private Integer pstate;

    private List<User> userList;

    public Person(String pname, String ppass, Integer pstate, List<User> userList) {
        this.pname = pname;
        this.ppass = ppass;
        this.pstate = pstate;
        this.userList = userList;
    }
}

 

实现去重

package com.gao.JDK8.Stream流;

import java.util.*;
import java.util.stream.Collectors;

public class G01 {
    public static void main(String[] args) {

        List<Person> personList = new ArrayList<>();

        User user1 = new User("高","123456",new Date());
        User user111 = new User("高","123456",new Date());

        User user2 = new User("王", "123456", new Date());
        User user222 = new User("王", "123456", new Date());

        User user3 = new User("g", "123", null);


        List<User> userList1 = Arrays.asList(user1,user111, user3);
        List<User> userList2 = Arrays.asList(user2,user222, user3);


        Person person1 = new Person("用户1", "123", 1, userList1);
        Person person2 = new Person("用户2", "321", 1, userList2);

        personList.add(person1);
        personList.add(person2);


        /*
        * 实现目标 对 personList集合中  userList集合中的 name属性进行 去重
        *
        * 实现步骤:
        *         1. 先遍历 personList 集合
        *         2. 再遍历 userList 集合的同时赋值
        */
        personList.stream().forEach(
                userList->{
                    userList.setUserList( //赋值操作
                            userList.getUserList().stream().collect(
                                    Collectors.collectingAndThen(
                                            Collectors.toCollection( ()->new TreeSet<User>(Comparator.comparing(user -> user.getName())) ) ,ArrayList :: new
                                    )
                            )
                    );
                }
        );

        personList.forEach(person -> System.out.println(person));

}}

 

实现结果:

 

 
posted @ 2022-11-07 22:12  向大海  阅读(1538)  评论(0编辑  收藏  举报