У меня есть поток int и хочу, чтобы каждый элемент этого потока выполнял некоторые вычисления и возвращал их как Map, где ключи являются значениями int, а значения являются результатом этих вычислений. Я написал следующий фрагмент кода:Преобразование int потока для отображения
IntStream.range(0,10).collect(Collectors.toMap(Function.identity(), i -> computeSmth(i)));
где computeSmth(Integer a)
. Я получил следующую ошибку компилятора
method collect in interface java.util.stream.IntStream cannot be applied to given types;
required: java.util.function.Supplier<R>,java.util.function.ObjIntConsumer<R>,java.util.function.BiConsumer<R,R>
found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.Map<java.lang.Object,java.lang.String>>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
Что я делаю неправильно?
'IntStream' только имеет 3-аргумент' collect'. Вы должны либо переписать свой 'toMap' в форме 3-arument, либо преобразовать' IntStream' в 'Stream' с '.boxed()' –
Misha
@Misha Спасибо, я только что узнал о 'boxed()'. Это, безусловно, улучшение по сравнению с mapToObj (Integer :: valueOf) '. :-) –