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

Java 8如何获取Map中所有指定前缀开头键的对应值

问题根因

Java原生Map.get()方法仅做精确键名匹配,不会自动解析%作为通配符实现模糊匹配。你代码里的coverages.get("contents_of_%")只会查找键名完全等于字符串contents_of_%的条目,自然无法命中所有以contents_of_开头的键。

修正代码

要实现前缀匹配取值,需要先遍历Map的所有条目,筛出键名符合前缀要求的值,再走后续的取值、类型转换逻辑。如果你的需求是取第一个匹配前缀的条目做后续处理,调整后的代码如下:

private static final String TARGET_KEY_PREFIX = "contents_of_";

Optional.ofNullable((Map<?, ?>) fieldValue)
        .map(coverages -> coverages.entrySet().stream()
                .filter(entry -> entry.getKey() != null)
                .filter(entry -> String.valueOf(entry.getKey()).startsWith(TARGET_KEY_PREFIX))
                .map(Map.Entry::getValue)
                .findFirst()
                .orElse(null))
        .filter(Objects::nonNull)
        .filter(LinkedHashMap.class::isInstance)
        .map(LinkedHashMap.class::cast)
        .map(contents -> contents.get("limit"))
        .map(limit -> new BigDecimal(String.valueOf(limit)))
        .orElse(new BigDecimal(number));
补充说明
  • 前缀判断直接用字符串原生的startsWith()方法实现,无额外依赖,逻辑透明可控
  • 键名判断前加了非空校验,避免键为null时触发空指针
  • 如果你需要拿到所有匹配前缀的键对应的值,把流处理里的findFirst().orElse(null)替换为.collect(Collectors.toList())即可,后续可遍历列表处理每一个匹配到的条目
  • 原链式调用里开头的.filter(Objects::nonNull)和Optional.ofNullable的判空逻辑重复,保留也不会影响运行结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:36:17