JAVA преобразование типов внутри stream
нужно принять поток интов и делитель, и вернуть Map<делимое, результат деления>
в Math.floorMod(number, divisor) ругается на то, что number - Object, хотя если просто считать через .map там будет число, подскажите пожалуйста почему так получается и как решить?
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Collecting {
public static void main(String[] args) {
Collecting collecting = new Collecting();
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 5; i++)
list.add(i);
IntStream stream = list.stream().mapToInt(Integer::valueOf);
int res = collecting.oddSum(stream);
}
public Map<Integer, Integer> sumByRemainder(IntStream stream, int divisor) {
return stream
.collect(Collectors.toMap(number -> number, number -> (Math.floorMod(number, divisor))));
//.map(number -> Math.floorMod(number, divisor));
}
}
Ответы (1 шт):
Автор решения: Nofate
→ Ссылка
Проблема глубже, IntStream.collect() принимает три параметра и не работает с обычным интерфейсом Collector.
Самое простое, что вы можете сделать, это преобразовать IntStream в Stream<Integer>.
return stream.mapToObj(Integer::valueOf)
.collect(Collectors.toMap(
number -> number,
number -> Math.floorMod(number, divisor)
));