按整数计数分组

Group by integer count

我有 ListInteger,我正在尝试使用流 API:

计算每个数字的频率
// List looks like [5,6]

Map<String, Long> map = array.stream()
.collect(
    Collectors.groupingBy(Integer::valueOf, Collectors.counting())
);

但是,编译失败并显示以下内容:

error: incompatible types: inference variable K has incompatible bounds
                .collect(
                        ^
    equality constraints: String
    lower bounds: Integer

我如何实现我想做的事情?

您生成的地图以 String 作为键,而不是 Integer

要么将其转换为字符串:

Map<String, Long> map = array.stream()
.collect(
    Collectors.groupingBy(Integer::toString, Collectors.counting())
);

或使用 Integer 作为键:

Map<Integer, Long> map = array.stream()
.collect(
    Collectors.groupingBy(Function.identity(), Collectors.counting())
);

问题在于您的地图类型:Map 不匹配 Map

Map<String, Long> map = array.stream()
.collect(
    Collectors.groupingBy(Integer::valueOf, Collectors.counting())
);

Map<Integer, Long> map = array.stream()
.collect(
    Collectors.groupingBy(Integer::valueOf, Collectors.counting())
);
    public static void main(String[] args) 
{   
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(1);
    list.add(2);
    list.add(2);
    list.add(3);
    list.add(4);
    
    Map<Integer, Long> result = list.stream()
              .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
    
    System.out.println(result);
    
    
}

结果是:{1=2, 2=2, 3=1, 4=1}

我认为问题在于 Map 被声明为