我有以下代码:
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 ,并显示消息非静态方法不能从静态上下文中引用
知道如何解决此问题吗?
答案 0 :(得分:1)
Map::merge
以BiFunction
作为其最后一个参数来合并键冲突处的值。
您需要找到一种方法来合并两个给定的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。