java-stream-根据某个字段去重
public static void main(String[] args) { List<User> userList = new ArrayList<>(); userList.add(new User("1","李大锤","23","南京")); userList.add(new User("2","张无忌","18","西安")); userList.add(new User("3","刘德华","26","苏州")); userList.add(new User("4","郭靖","33","上海")); userList.add(new User("1","李大锤","23","南京")); userList.add(new User("3","带头大哥","36","杭州")); System.out.println("原数据"+userList); userList = userList.stream()
.collect(Collectors.collectingAndThen(Collectors
.toCollection(()->new TreeSet<>(Comparator.comparing(User::getId))), ArrayList::new)); System.out.println("现数据"+userList); } 原数据:[User(id=1, username=李大锤, password=23, address=南京), User(id=2, username=张无忌, password=18, address=西安), User(id=3, username=刘德华, password=26, address=苏州), User(id=4, username=郭靖, password=33, address=上海), User(id=1, username=李大锤, password=23, address=南京), User(id=3, username=带头大哥, password=36, address=杭州)]
去重后的数据:[User(id=1, username=李大锤, password=23, address=南京), User(id=2, username=张无忌, password=18, address=西安), User(id=3, username=刘德华, password=26, address=苏州), User(id=4, username=郭靖, password=33, address=上海)]
// 使用Collectors.toMap去重并保持顺序 List<Person> uniquePersons = persons.stream() .collect(Collectors.toMap( Person::getId, // 根据id去重 p -> p, // 使用原始对象 (existing, replacement) -> existing, // 如果有重复,保留原始对象 LinkedHashMap::new
)).values().stream() // 获取去重后的值 .collect(Collectors.toList()); // 转换回List
rs = new ArrayList<>(rs.stream() .collect(Collectors.toMap( Person::getId, Functions.identity(), (f, n) -> f, LinkedHashMap::new
)).values());
List<Map<String, Object>> tableList
= tableList.stream().collect(Collectors.collectingAndThen( Collectors.toMap( m -> m.get(UUID), // key 为要比较的字段 m -> m, // value 为 Map 本身 (m1, m2) -> m1, // 冲突时保留第一个 LinkedHashMap::new // 保持顺序 ), map -> new ArrayList<>(map.values()) // 转回 List ));

浙公网安备 33010602011771号