无法从静态上下文引用Map.merge ..非静态方法

时间:2018-12-21 10:50:42

标签: java java-8

我有以下代码:

    public List<String> myMethod(){
    ..
    ...... 
    Map<String, Module> m1 = new HashMap<>();
    Map<String, Module> m2= new HashMap<>();
    Set<Map.Entry<String, Module>> entries = m2.entrySet();
    for( Map.Entry<String, Module>  e : entries){
        m1.merge(e.getKey(),e.getValue(),String::concat);
        }
    .....
   }

我在这里出现错误行 String :: concat ,并显示消息非静态方法不能从静态上下文中引用

知道如何解决此问题吗?

2 个答案:

答案 0 :(得分:1)

Map::mergeBiFunction作为其最后一个参数来合并键冲突处的值。

您需要找到一种方法来合并两个给定的Module's而不是String

换句话说,是:

 m1.merge(e.getKey(),e.getValue(),(Module l, Module r) -> ...);

另一方面,您可以将代码简化为:

m2.forEach((k, v) -> m1.merge(k, v, (Module l, Module r) -> ...));

答案 1 :(得分:1)

您的地图值属于模块类型。 String :: concat返回一个String,您的第三个参数需要返回一个“合并的”模块,而不是String :: concat。