У меня есть две переменные следующим образом:
List<Basket> bigBasket = new ArrayList<>();
Basket basket = new Basket();
Я написал следующий код, чтобы добавить связь между элементами в bigBasket
и basket
:
for (Fruit specialFruit : bigBasket.get(0).getFruitInBasket()) {
for (Fruit fruit : basket.getFruitInBasket()) {
specialFruit.addRelationship(fruit);
}
}
Теперь все в порядке, но IntelliJ проверил код и предложил улучшить его с помощью ссылки на метод, поэтому я получил следующее:
for (Fruit specialFruit : bigBasket.get(0).getFruitInBasket()) {
basket.getFruitInBasket().forEach(specialFruit::addRelationship);
}
Итак, в приведенном выше меньше строк, но в чем его фактическое преимущество? Я не совсем разбираюсь в преимуществах функций Java 8, поэтому, вероятно, я не совсем понимаю, что происходит.
На мой взгляд, «улучшенная» версия кода не очень удобочитаема в смысле немедленного понимания того, что происходит по сравнению со стандартным циклом for, если у вас мало знаний о функциях Java 8.
Может ли кто-нибудь объяснить преимущества «улучшенного» кода по сравнению со стандартным циклом for?
РЕДАКТИРОВАТЬ: удалены неправильные ссылки на лямбда-выражения. В коде используются только ссылки на методы — просто моя языковая ошибка!
bigBasket.get(0).getFruitInBasket().forEach(specialFruit -> basket.getFruitInBasket().forEach(fruit -> specialFruit.addRelationship(fruit) ));
? - person Holger   schedule 19.02.2015forEach
намного проще, потому что меньше вещей нужно проверять, чтобы быть уверенным в том, что делает фрагмент. - person Marko Topolnik   schedule 19.02.2015