我如何使用流按给定除数除法的余数对元素进行分组?

How can I use streams to group elements by a remainder of division by the give divisor?

我有一个整数输入流和一些数字作为设计器。我想要这样的结果:
sumByRemainder(3, (1,2,3,4,5)) -> (0, 3), (1, 5), (2, 7)

下面的代码有什么问题?

public Map<Integer, Integer> sumByRemainder(Integer devisor, IntStream is) {
    Map<Integer, Integer> map = is.collect(Collectors.groupingBy(s -> s % devisor, 
Collectors.summingInt()));
    return map;
}

你的意思是:

return is
       .boxed()
       .collect(Collectors.groupingBy(s -> s % devisor, Collectors.summingInt(x -> x)));

请注意,您应该使用 .boxed()IntStream 中获取原始值,而不是 groupingBy 中的值被视为 Object 而您不能将 Object 除以 Integer

你应该 box IntStreamStream<Integer>,因为 Collectors 只适用于包装器类型,而不适用于原语。

public Map<Integer, Integer> sumByRemainder(int divisor, IntStream is) {
    return is.boxed().collect(Collectors.groupingBy(s -> s % divisor,
        Collectors.summingInt(x -> x)));
}