Что из следующего является лучше практикой в Java 8?
Java 8:
list.forEach(e -> e.operation);
Java 7:
for (E e : list) {
e.operation;
}
У меня есть много циклов, которые могут быть упрощены с помощью лямбд, но есть ли какие-то реальные преимущества от использования Iterator.foreach
?
Улучшится ли производительность и читабельность кода?
С точки зрения производительности нет никаких обещанных заметных преимуществ от использования Iterable.forEach
по сравнению с foreach
.
Согласно официальным javadoc на Iterable.forEach
:
Performs the given action on the contents of the Iterable, in the order elements occur when iterating, until all elements have been processed or the action throws an exception.
Т.е. понятно, что не будет никакого явного параллелизма. Добавление параллелизма будет нарушением LSP.
Про читабельность кода: вы вероятно используете Iterable.foreach
только с короткими однострочными лямбдами. Если "тело" лямбды увеличится, то читабельность скорее всего будет хуже, чем в цикле.
Примечание: этот ответ работает при использовании StreamAPI
. Если используется только java.util.Iterable
, то этот ответ перестает работать.
У вас будет сильное преимущество при параллельной обработке большого количества данных. Если вы хотите, что бы цикл выполнялся параллельно, то вы должны использовать такую конструкцию:
list.parallelStream().forEach(e -> e.operation);
Однако использование не-параллельных стримов при обработке малого количества данных будет дольше, чем foreach
и циклы.
Вывод:
Iterable.foreach
и циклом foreach
в производительности разницы нет.Iterable.foreach
.parallelStream.foreach()
.Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
gui приложения при открытии долго грузиться как можно померить время загрузки ? за сколько от отрисовывает layoutxml
Всем привет помогите пожалуйста найти ссылку или запрос который поможет мне вытащить список подпищиков моего вайбер ботаВ документации...
Есть прозрачная картинка с декоративным шрифтом при ховере на которую накладывается filter со свойством drop-shadow
Я только изучаю языкПодскажите как правильно реализовать чтоб при угадывании буквы ( при вводе с клавиатуры) в слове угадывание начиналось...