Я писал фрагмент кода, в котором у меня была строка [], и метод, который принимает эту строку [], и возвращает Byte [], поддерживая пару строковых байт с положением, в котором некоторые из байтов могут быть пустыми. В конце концов, я должен преобразовать Byte и получить карту с ключом как строку из String [] и значение как возврат преобразования. Это, как я реализовал то же самое в Java 8 потоков:IntStream.boxed() vs for loop | Производительность
IntStream.range(0, productReferences.length)
.filter(index -> (null!= productsPrice[index])).boxed()
.collect(Collectors.toMap(position -> productReferences[position],
position ->callSomeMethod(productsPrice[position])));
где productReference является String [] и продуктовОбработка [] является байт [] массив.
Теперь вопрос заключается в методе IntStream.boxed(). Внутри он помещает int в Integer так, чтобы он возвращал Stream, который, по моему мнению, является более дорогостоящей операцией.
Другой способ будет использовать Java для цикла
for(int i=0;i<productReferences.length; i++){
if (productsPrice[index]==null) continue;
//other code
}
Каков наилучший способ обработки такого рода сценария? Я понимаю причину создания IntStream, но если я действительно могу иметь индекс в методе сбора без метода boxed(), тем самым избегая бокса?
Преждевременная оптимизация - это корень всего зла - если вам не нужна эта дополнительная производительность, придерживайтесь того, что вам легче понять. – Mac70
@ Mac70 Я полностью согласен с тем, что вы говорите, сэр. :-) Еще одним дополнением к котенку знаний всегда является +1. – piyushGoyal