JAVA分组GroupBy后原有的顺序会打乱,如何按原顺序进行分组

实体类Test

public class Test{
    private String id;
    private String xh;
}

按xh排序后的testlist,
直接进行分组的方法:
Map<String,List<Test>> groupbyGradeList =testlist.stream().collect(Collectors.groupingBy(Test::getId));
这样按id分组 会发现获取的map的 id的顺序不是xh的顺序基础下分组
分组操作会丢失原始列表中的顺序信息,因为分组的结果是一个Map,而Map(如HashMap)不保证顺序。
然而,如果你想要在分组后仍然能够按照某个字段(如xh)对分组内的元素进行排序,你可以这样做:
首先,根据字段id进行分组。
然后,对分组后的每个列表根据字段xh进行排序。

 Map<String, List<Test>> groupedAndSorted = beans.stream()
                .collect(Collectors.toMap(
                        User::getId, // 分组id
                        Collections::singletonList,  
                        (existing, replacement) -> {  
                            List<User> merged = new ArrayList<>(existing);
                            merged.addAll(replacement);
                            // 排序
                            merged.sort(Comparator.comparing(User::getXh));
                            return merged;
                        },
                        LinkedHashMap::new  
                ));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值