我试图在forEach循环中使用lambda表达式将每个对象计算的字符串连接到变量“i”。
private String getStringActiveRooms(@NotNull ArrayList<Chat_room> c){
String i;
c.forEach( (chat_room) -> i = i.concat(chat_room.getName() + "[" + chat_room.activeUsers() + "/" + chat_room.maxUsers() + "]" + ", "));
return i;
}
它给我带来了一个错误,因为外部变量必须是final才能在lambda表达式中使用。
但是如果我将变量设置为final,我就不能更改它,代码也不能工作。
有人有解决办法吗?
可以使用StringBuffer
private String getStringActiveRooms(@NotNull ArrayList<Chat_room> c){
final StringBuffer i = new StringBuffer();
c.forEach( (chat_room) -> i.append(chat_room.getName() + "[" + chat_room.activeUsers() + "/" + chat_room.maxUsers() + "]" + ", "));
return i.toString();
}
此外,您必须知道,从性能的角度来看,使用StringBuffer
更好:String是不可变的,这意味着如果您有一个Stringi
,每次迭代i+“something”
都会在堆空间中创建一个新的String对象,为临时变量分配内存
我想更新一个条目,如下所示: 此代码向我提供了以下错误消息: lambda表达式中使用的变量应该是最终的或有效的最终的 我该如何解决这个问题?
本文向大家介绍如何在Java中声明lambda表达式中的变量,包括了如何在Java中声明lambda表达式中的变量的使用技巧和注意事项,需要的朋友参考一下 lambda表达式 是一个函数,期望并接受输入参数,并产生输出结果。它是功能接口 的实例,也称为单个抽象方法接口(SAM 接口),如Runnable,Comparator,Callable 等。我们可以将变量声明为final string []
我在尝试使用lambda表达式时遇到了这个错误。
问题内容: 我试图通过执行程序和可运行程序并行执行100个任务,该任务需要使用循环变量: 我在“我”的语气中a不休- 据我所知,由于每次迭代都会更改循环变量,因此无法使其成为最终变量或有效地成为最终变量。我找到了一个简单的解决方法, 在我看来,这并不是最有效的解决方案,因为每次迭代都要声明一个新变量。有更好的方法吗? 问题答案: 有更好的方法吗? 我对此表示怀疑。您的解决方案对我来说看起来不错,但
我有一个用户表,其中我有(Id,reportingUserId)。reportingUserId 包含一个字符串,该字符串表示用户向其报告的用户 Id(上级)。现在,在删除用户时,我应该检查是否有任何用户向此用户报告。如果它们存在,那么我应该将其报告用户 Id 值更改为上级的用户 Id。此处报告用户是当前用户的劣势列表。 现在,当我这样做的时候,我得到了lambda表达式中使用的在第二个if条件的