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

Java中如何获取已生成Map集合的最后一个value值

方案说明

注意前提:Java 中常用的HashMap是无序实现,不会保留键值对的插入顺序,你原来代码中Collectors.toMap()默认返回的就是HashMap,无法稳定拿到你期望的字符串中最后一组键值对的value。如果要保留插入顺序,需要先调整解析代码,生成有序的LinkedHashMap。

步骤1:调整解析代码,生成有序Map

修改后的解析逻辑如下,确保生成保留插入顺序的Map:

public Map<String, String> getCommaSeperatedSalaryMap(String salaries) {
    if (salaries.isEmpty()) {
        return Maps.newLinkedHashMap(); // 空Map也返回LinkedHashMap保证类型统一
    }
    Map<String, String> salariesList = Arrays.stream(salaries.split(","))
            .map(s -> s.split(":"))
            .collect(Collectors.toMap(
                s -> s[0].trim(),
                s -> s[1].trim(),
                (oldVal, newVal) -> newVal, // 遇到重复key时保留后插入的值,可按需调整逻辑
                LinkedHashMap::new
            ));
    return salariesList;
}

步骤2:提取最后一个value

你可以根据自己使用的Java版本选择对应实现:

  • 通用兼容方法(兼容所有Java版本)
    将entrySet转为列表后取最后一个元素的value:
Map<String, String> salaryMap = getCommaSeperatedSalaryMap("1:1000,6:5000,12:15000");
String lastValue = null;
List<Map.Entry<String, String>> entryList = new ArrayList<>(salaryMap.entrySet());
if (!entryList.isEmpty()) {
    lastValue = entryList.get(entryList.size() - 1).getValue();
}
// 输出结果为15000
  • Java 21+ 简化写法
    LinkedHashMap在Java 21及以上版本提供了直接获取最后一个entry的lastEntry()方法:
Map<String, String> salaryMap = getCommaSeperatedSalaryMap("1:1000,6:5000,12:15000");
String lastValue = null;
if (salaryMap instanceof LinkedHashMap<String, String> linkedMap && !linkedMap.isEmpty()) {
    lastValue = linkedMap.lastEntry().getValue();
}

补充简化方案

如果你只需要拿字符串最后一组的value,不需要用到完整Map,可以直接处理原始字符串,性能更好:

if (!salaries.isEmpty()) {
    String[] pairs = salaries.split(",");
    String lastPair = pairs[pairs.length - 1];
    String lastValue = lastPair.split(":")[1].trim();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:18:00