当前位置: 首页 > 知识库问答 >
问题:

如何在lambda表达式中使用外部变量[重复]

马华茂
2023-03-14

我试图在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,我就不能更改它,代码也不能工作。

有人有解决办法吗?

共有1个答案

弘浩博
2023-03-14

可以使用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条件的