5

我有两个变量如下:

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 功能了解不多,那么从立即理解正在发生的事情与标准 for 循环的意义上说,“改进”版本的代码可读性不是很好。

有人可以解释“改进”代码与标准 for 循环的好处吗?

编辑:删除了对 lambdas 的不正确引用。该代码只是使用方法引用——这只是我的一个术语错误!

4

1 回答 1

6

我认为“改进的”代码在性能方面没有优势。两个片段都将遍历整个basket.getFruitInBasket()Collection,并对每个元素执行完全相同的操作。

喜欢一种方式而不是另一种方式只是品味问题。在我看来,Java 8 版本更清楚地表达了您对 Collection 的所有元素执行单个操作的事实(假设您习惯于方法引用)。

顺便说一句,您的代码中没有 lambda 表达式,只是一个方法引用。

于 2015-02-19T10:56:01.213 回答