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))
or
Stream.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
那样修改现有的映射。