Java使用lambda表达式生成流tomap时出错

Java使用lambda表达式生成流tomap时出错,java,lambda,casting,java-8,java-stream,Java,Lambda,Casting,Java 8,Java Stream,当我试图编译这行代码时: public Map<String,Long>countBranchesPerMunicipality(){ return mappamun.values().stream() .collect(toMap(m->m.getName() , m->m.getBranches().size())); } public MapcountBranchesPerMunicipality(){ 返回mappamun.va

当我试图编译这行代码时:

public Map<String,Long>countBranchesPerMunicipality(){
    return mappamun.values().stream()
            .collect(toMap(m->m.getName() ,  m->m.getBranches().size()));
}
public MapcountBranchesPerMunicipality(){
返回mappamun.values().stream()
.collect(toMap(m->m.getName(),m->m.getBranchs().size());
}
它给了我一个错误:

无法从
Map
转换为
Map

有人能给我解释一下原因吗?

这个
getBranchs()
方法很可能返回一个
Collection
实例,而
Collection.size()
返回的是
int
而不是
long

因此,您应该将方法的返回类型从

Map<String,Long>
Map
致:

Map
当然
m.getName()
应该返回一个字符串

int size();
它是
列表扩展集合所返回的内容。自动装箱将
int
s转换为
Integer
s,但不会转换为
Long
s。这就是为什么会出现编译错误

有两种可能的选择:

  • 将返回类型更改为
    Map
    (首选)
  • 将大小强制转换为
    long
    (long)m.getBranchs().size()

  • 什么类型有
    mappamun
    ?你能给我一个答案吗?我怎么能在那条小溪里投到很长的距离?感谢you@SamuraiJack,你为什么不考虑第二个选项?因为这是学校的练习,我不能改变地图的类型。你能把它添加到问题中吗?我们可以找到更好的解决办法。无论如何,演员阵容是
    (long)m.getBranchs().size()
    int size();