Java使用Stream groupingBy统计Integer频率报类型不兼容错误如何解决
报错原因
error: incompatible types: inference variable K has incompatible bounds
equality constraints: String
lower bounds: Integer
报错核心是Map的键类型和groupingBy返回的分组键类型不匹配:
- 你声明接收结果的
Map<String, Long>要求键是String类型 - 但
Collectors.groupingBy(Integer::valueOf)是将流中的Integer元素直接转为Integer作为分组键,返回的Map类型为Map<Integer, Long>,两者类型不兼容导致编译失败。
解决方案
可根据业务需求选择两种实现方式:
场景1:以数字本身作为键(推荐,匹配原始数据类型)
直接修改Map的键泛型为Integer即可,代码如下:
// 示例输入 List<Integer> array = Arrays.asList(5,6,5); Map<Integer, Long> map = array.stream() .collect( Collectors.groupingBy(Integer::intValue, Collectors.counting()) // 也可以写成 groupingBy(Function.identity(), Collectors.counting()),效果一致 );
运行后输出结果为{5=2, 6=1},符合统计需求。
场景2:必须使用字符串作为键
如果业务要求键为字符串类型,修改分组函数为数字转字符串的逻辑即可,代码如下:
Map<String, Long> map = array.stream() .collect( Collectors.groupingBy(num -> String.valueOf(num), Collectors.counting()) );
运行后输出结果为{"5"=2, "6"=1}。
内容的提问来源于stack exchange,提问作者bear
相关产品推荐
相关产品推荐

