【问题标题】:How I can use an external variable in a lambda expression [duplicate]如何在 lambda 表达式中使用外部变量 [重复]
【发布时间】:2020-01-13 20:49:02
【问题描述】:

我正在尝试在 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,我将无法更改它并且代码不起作用。

有人有解决办法吗?

【问题讨论】:

标签: java lambda


【解决方案1】:

您可以使用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 are immutable 这意味着如果您有一个 String i,则每次迭代 i + "something" 都会创建堆空间中的新字符串对象为临时变量分配内存

【讨论】:

    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2011-02-12
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多