Как я могу использовать внешнюю переменную в лямбда-выражения

голоса
1

Я пытаюсь использовать лямбда - выражение в цикле ForEach для конкатенации переменной «я» строку , которая вычисляется для каждого объекта.

вот код

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;

}

Он бросает мне ошибку , поскольку внешние переменные должны быть окончательными для использования в лямбда - выражении.
Но если я делаю окончательный переменная не может изменить его и код не работает.

у кого-нибудь есть решение?

Задан 13/01/2020 в 23:49
источник пользователем
На других языках...                            


1 ответов

голоса
2

Ты можешь использовать 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лучше с точки зрения производительности: Строка неизменно это означает , что если у вас есть строки iкаждая итерация i + "something"создается новый объект String , в выделении памяти кучи пространства для временных переменного

Ответил 13/01/2020 в 23:53
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more