gpt4 book ai didi

java - 为什么 lambda 强制我使用单个元素数组而不是最终对象?

转载 作者:搜寻专家 更新时间:2023-11-01 03:47:54 24 4
gpt4 key购买 nike

我有以下类(class):

public class Item{
private String name;
//setter getter
}

和项目集合。我想获取集合中最后一项的名称。为此,我只需遍历所有集合并最后使用。问题是我不知道为什么它会强制我使用一个元素字符串数组。

为什么我必须使用:

String[] lastName = {""};
items.forEach(item -> lastName[0] = item.getName());
System.out.println(lastname[0]);

代替:

final String lastName;
items.forEach(item -> lastName = item.getName());
System.out.println(lastname);

最佳答案

您不能将 lastName 设为 String,因为在 lambda(或匿名内部类)中使用的局部变量必须(有效)final ( see here ),即您不能在 .forEach 循环中每次执行 lambda 时覆盖它。当使用数组(或其他一些包装器对象)时,您不会为该变量分配新值,而只会更改它的某些方面,因此它可以是最终的。

或者,您可以使用 reduce 跳到最后一项:

String lastName = items.stream().reduce((a, b) -> b).get().getName();

或者,如注释中所述,跳过n-1 个元素并取其后的第一个元素:

String last = items.stream().skip(items.size() - 1).findFirst().get().getName();

关于java - 为什么 lambda 强制我使用单个元素数组而不是最终对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38933530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com