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)); }}
实现结果: