我如何使用流按给定除数除法的余数对元素进行分组?
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 IntStream
到 Stream<Integer>
,因为 Collector
s 只适用于包装器类型,而不适用于原语。
public Map<Integer, Integer> sumByRemainder(int divisor, IntStream is) {
return is.boxed().collect(Collectors.groupingBy(s -> s % divisor,
Collectors.summingInt(x -> x)));
}
我有一个整数输入流和一些数字作为设计器。我想要这样的结果:
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 IntStream
到 Stream<Integer>
,因为 Collector
s 只适用于包装器类型,而不适用于原语。
public Map<Integer, Integer> sumByRemainder(int divisor, IntStream is) {
return is.boxed().collect(Collectors.groupingBy(s -> s % divisor,
Collectors.summingInt(x -> x)));
}