List分组后获取第一条数据


用户实体

@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分组,然后选取第一条数据。

结果

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM