用户实体

@Data
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private Integer score;
}

根据name分组,获取每组最大分数对应的一条数据。

    public static void main(String[] args) {
        List<User> list=new ArrayList<>();
        list.add(new User(1,"kobe",20));
        list.add(new User(2,"james",40));
        list.add(new User(3,"durant",20));
        list.add(new User(4,"kyrie",30));
        list.add(new User(5,"paul",20));
        list.add(new User(6,"james",50));
        list.add(new User(7,"paul",40));
        list.add(new User(8,"james",30));
        list.add(new User(9,"paul",50));
        list.add(new User(10,"kyrie",55));
        list.add(new User(11,"james",60));
        list.add(new User(12,"kobe",70));
        list.add(new User(13,"wade",55));
        list.add(new User(14,"durant",59));
        list.add(new User(15,"kobe",45));
        list.add(new User(16,"kyrie",55));

        Map<String, User> collect = list.stream().sorted((u1, u2) -> u2.getScore() - u1.getScore()).collect(Collectors.groupingBy(User::getName, 
Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0)))); ArrayList<User> users = new ArrayList<>(collect.values()); users.forEach(System.out::println); }

利用java8 的stream流来处理,先将score倒序,然后按name分组,然后选取第一条数据。

结果

 

 posted on 2022-03-14 17:14  会飞的金鱼  阅读(1563)  评论(0)    收藏  举报