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

为什么流中排序HashMap时Map.Entry::getKey和getValue报静态上下文错误

错误原因

你代码里的sort方法参数使用了无泛型的原始类型Map,没有指定键值的泛型类型。Java泛型擦除机制下,原始类型Map调用entrySet()返回的集合没有泛型信息,流中遍历到的元素会被识别为Object类型,而非Map.Entry类型。此时你使用Map.Entry::getKey方法引用时,编译器无法匹配到对应实例的非静态方法,就会抛出「非静态方法不能从静态上下文引用」的错误。

修复方案
  • 给方法参数的Map添加明确的泛型约束,匹配你方法返回值的键值类型即可。

修正后的代码如下:

public class sortByValue implements Sorting{
    @Override
    public LinkedHashMap<String,Integer> sort(Map<String, Integer> map) {
        return map.entrySet().stream()
                .sorted(Map.Entry.comparingByValue())
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue,
                        (oldValue, newValue) -> oldValue, LinkedHashMap::new));
    }
}

如果需要适配更通用的入参场景,也可以把参数泛型写成通配符形式Map<? extends String, ? extends Integer> map,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:27:01