Como posso usar uma variável externa em uma expressão lambda

votos
1

Eu estou tentando usar um lambda expressão em um loop foreach para concatenar a uma variável i uma string que é avaliada para cada objeto.

aqui está o código

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;

}

Ele me lança um erro porque variáveis externas deve ser final, para ser usado em uma expressão lambda.
Mas se eu fizer final, a variável não posso mudar isso e o código não funcionou.

Alguém tem uma solução?

Publicado 13/01/2020 em 23:49
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Você pode usar 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();

}

Além disso, você tem que saber que o uso StringBufferé melhor do ponto de vista do desempenho: Cordas são imutáveis Isto significa que se você tem uma String icada iteração i + "something"cria um novo objeto String na memória alocar espaço de pilha para uma variável temporária

Respondeu 13/01/2020 em 23:53
fonte usuário

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