我怎样才能解决这个问题? [复制]
Posted
技术标签:
【中文标题】我怎样才能解决这个问题? [复制]【英文标题】:How can i get around this? [duplicate] 【发布时间】:2019-04-10 03:26:01 【问题描述】:我有这段代码,但我不明白为什么会出现以下错误:
local variables referenced from a lambda expression must be final or effectively final
这是我的代码
public int firstMissingPositive(int[] nums)
int k;
for (int i = 1;; i++)
if (!Arrays.stream(nums).anyMatch(x -> x != i))
k = i;
break;
return k;
【问题讨论】:
如果您键入 从 lambda 表达式引用的局部变量必须是 final 或有效 final 或它们的某种组合,SO 会显示多个重复项。 代码性能很差(O(n^2))。您可以通过对数组进行排序或通过构建找到的值的boolean[]
或 ... 来获得更好的性能
未来:请花一些时间为您的问题找到一个合理的标题。这是一个问答社区,所有内容都应该写成对未来的读者有帮助。很少有未来的读者会发现 我怎样才能解决这个问题? 是一个有用的起点......
今天很抱歉。我会牢记这一点。
【参考方案1】:
因为i
不是实际上是最终的(请参阅i++
),它必须在 lambda 表达式中使用。
通过在循环内分配一个新的局部变量,很容易修复:
public int firstMissingPositive(int[] nums)
int k;
for (int i = 1;; i++)
final int j = i;
if (! Arrays.stream(nums).anyMatch(x -> x != j))
k = j;
break;
return k;
【讨论】:
这应该也可以在没有j
的 final 关键字的情况下工作,对吧?
@Deadpool 是的。即使没有关键字,它也是“有效的最终”。
听起来不错@Michael以上是关于我怎样才能解决这个问题? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥应用程序在 iPhone 模拟器中崩溃;我怎样才能解决这个问题?