使用lambda表达式的Java tomap流给了我错误

时间:2017-08-09 14:08:08

标签: 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()));
}

它给了我错误:

  

无法从Map<Object,Object>转换为Map<String,Long>

有人可以向我解释原因吗?

2 个答案:

答案 0 :(得分:3)

int size();

这是List<E> extends Collection<E>返回的内容。自动装箱会将int转换为Integer s,但不转换为Long s。这就是你得到编译错误的原因。

有两种可能的选择:

  1. 将退货类型更改为Map<String, Integer> (首选);
  2. 将尺寸转换为long(long)m.getBranches().size()

答案 1 :(得分:0)

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

因此,您应该从

更改方法的返回类型
Map<String,Long>

到:

Map<String,Integer>

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