You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java8中排序对象并基于序号创建Map遇到问题

问题分析与修复方案

原代码存在的问题

  • 类名不匹配:定义的实体类是person,但流操作里误用了refDataDto,直接导致编译错误
  • 方法名拼写错误:getastName是笔误,正确写法应为getLastName
  • 冗余流操作:排序后无需先转成List再重新开启流,一次流操作即可完成排序+收集逻辑
  • 潜在异常风险:Collectors.toMap默认遇到重复Key会抛出IllegalStateException,如果列表中存在相同firstName的对象,必须指定重复Key的合并规则

修复后的代码

Map<String, String> xza = personList.stream()
    .sorted(Comparator.comparing(person::getOrderNum))
    .collect(Collectors.toMap(
        person::getFirstName,
        person::getLastName,
        // 若存在重复firstName,保留排序后先出现的对象的lastName
        (existingVal, newVal) -> existingVal
    ));

补充说明

如果能确保personList中所有对象的firstName绝对唯一,也可以省略合并规则参数,但保留该参数能让代码更健壮,避免意外的运行时异常。

内容的提问来源于stack exchange,提问作者Hanuman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:12:03