List<Map> 用Stream根据多字符串字段排序

List在添加.thenComparing后排序时会会显示为Object对象,从而get报错,解决方法如下,换成以下写法即可

finalList.stream()
                .sorted(
                        Comparator.comparing((Map<String, Object> i) -> i.get("product1").toString())
                                .thenComparing((Map<String, Object> i) -> i.get("product2").toString())
                                .thenComparing((Map<String, Object> i) -> i.get("product3").toString())
                )
                .collect(Collectors.toList());
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常抱歉,我理解有误。根据你的说明,我重新修改了代码,使其能够实现将一组list<String>补全到另一组分组数据List<Map>中,其中每个Map都是需要补全的Map,其中一个字段list<String>中对应的值。具体来说,可以按照以下步骤进行操作: 1. 将待补全的List<String>转换为Map<String, String>,其中key为需要匹配的字段k的值,value为待补全的字符串。 2. 使用Stream API的forEach方法遍历需要补全的分组List<Map>,对于每个Map,如果其包含需要匹配的字段k的值,则将待补全的字符串添加到对应的List中;如果不包含,则创建一个新的Map,其中"k"字段设置为对应的值,"list"字段设置为一个新的列表,然后将待补全的字符串添加到该列表中,最后将该Map添加到分组List<Map>中。 下面是代码示例: ```java List<String> stringList = new ArrayList<>(); // 待补全的List<String> List<Map<String, List<String>>> groupList = new ArrayList<>(); // 需要补全的分组List<Map> // 将待补全的List<String>转换为Map<String, String> Map<String, String> stringMap = stringList.stream() .collect(Collectors.toMap(s -> s.split(":")[0], Function.identity())); // 使用Stream API的forEach方法遍历需要补全的分组List<Map> groupList.forEach(map -> { // 获取需要匹配的字段k的值 String key = map.get("k"); if (key == null) { return; } // 如果待补全的List<String>中不存在对应的值,则创建一个新的Map并添加到分组List<Map>中 if (!stringMap.containsKey(key)) { Map<String, List<String>> newMap = new HashMap<>(); newMap.put("k", Collections.singletonList(key)); newMap.put("list", new ArrayList<>(Collections.emptyList())); groupList.add(newMap); return; } // 如果待补全的List<String>中存在对应的值,则将其添加到对应的Map中 String value = stringMap.get(key); map.computeIfAbsent("list", k -> new ArrayList<>()).add(value); }); ``` 上述代码中,如果待补全的List<String>中不存在对应的值,就会创建一个新的Map,其中"k"字段设置为对应的值,"list"字段设置为一个新的列表,然后将待补全的字符串添加到该列表中,最后将该Map添加到分组List<Map>中。如果待补全的List<String>中存在对应的值,就会将其添加到对应的Map中的"list"字段中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值