Java Map.merge。。无法从静态上下文引用非静态方法
我有以下代码:Java Map.merge。。无法从静态上下文引用非静态方法,java,java-8,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.entryS
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);
}
.....
}
公共列表myMethod(){
..
......
Map m1=新的HashMap();
Map m2=新的HashMap();
Set entries=m2.entrySet();
用于(地图条目e:条目){
m1.merge(e.getKey(),e.getValue(),String::concat);
}
.....
}
我在这里得到错误行String::concat,消息是无法从静态上下文引用非静态方法
知道如何解决这个问题吗?
Map::merge
将BiFunction
作为其最后一个参数来合并存在键冲突的值
您需要找到一种方法来合并两个给定的模块
而不是字符串
换句话说,它是:
m1.merge(e.getKey(),e.getValue(),(Module l, Module r) -> ...);
另一方面,您可以将代码简化为:
m2.forEach((k, v) -> m1.merge(k, v, (Module l, Module r) -> ...));
映射值的类型为Module。String::concat返回一个字符串,您的第三个参数需要返回一个“合并”模块,而不是String::concat。用于
merge
的第三个参数必须在2个模块中创建一个模块<代码>字符串::concat
不能这样做。如果您能告诉我们,您到底想如何合并它们,那会容易得多。我不确定,但是这个链接呢?在我看来,您可能需要一个基于两个现有映射的映射
。在这种情况下,您可以使用Stream.concat(m1.entrySet().Stream(),m2.entrySet().Stream()).collect(toMap(Map.Entry::getKey,e->e.getValue().getstrop(),String::concat))
orStream.concat(m1.entrySet().Stream(),m2.entrySet().Stream()).collect(groupingBy(Map.Entry::getKey,mapping(e->e.getValue().getstrop(),joining())代码>否则,下面的答案就足够了。最后,你可以更新你的帖子,让它更清晰。@Eugene我需要删除我的吗?。。。而带有合并功能的toMap
则是另一种方式<代码>m2.entrySet().stream().collect(toMap(e->e.getKey(),e->e.getValue(),(模块l,模块r)->…)
@HadiJ我想你的意思是stream.concat(m1.entrySet().stream(),m2.entrySet().stream()).collect(toMap(…)
如果是,那么我们可以这样做,但是每次都会构造一个新的映射,而不是像merge
那样修改现有的映射。