【发布时间】:2019-05-21 20:22:51
【问题描述】:
我有以下代码:
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 消息 non-static method cannot be referenced from static context
知道如何解决这个问题吗?
【问题讨论】:
-
merge的第三个参数必须在 2 个Modules 中构成一个Module。String::concat不会那样做。 -
如果你能告诉我们你想如何合并它们会容易得多
-
我不确定,但是这个链接stackoverflow.com/questions/4299728/…呢?
-
在我看来,您可能想要一个
Map<String, String>作为基于两个现有地图的结果。在这种情况下,您可以使用Stream.concat(m1.entrySet().stream(), m2.entrySet().stream()) .collect(toMap(Map.Entry::getKey, e -> e.getValue().getStrProp(), String::concat));或Stream.concat(m1.entrySet().stream(), m2.entrySet().stream()) .collect(groupingBy(Map.Entry::getKey, mapping(e -> e.getValue().getStrProp(), joining())));,否则下面的答案就足够了。最终,您可以更新您的帖子以使其更清晰。