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
相关产品推荐
相关产品推荐

