我有两个变量如下:
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功能的好处,这可能就是为什么我真的不明白发生了什么。
在我看来,代码的“改进”版本在立即理解正在发生的事情与循环标准的意义上并不是非常易读,假设您对Java 8功能没有太多了解。
有人可以解释“改进”代码与循环标准的好处吗?
编辑:删除了对lambdas的错误引用。代码只是使用方法引用 - 只是我的一个语言错误!
答案 0 :(得分:6)
我认为“改进”代码在性能方面没有优势。两个片段都将遍历整个basket.getFruitInBasket()
集合,并为每个元素执行完全相同的操作。
优先考虑另一种方式仅仅是品味问题。在我看来,Java 8版本表达了这样一个事实,即您可以更清楚地对集合的所有元素执行单个操作(假设您习惯于方法引用)。
BTW,代码中没有lambda表达式,只是一个方法引用。