¿Cómo puedo usar una variable externa en una expresión lambda

votos
1

Estoy tratando de utilizar una lambda expresión en un bucle foreach para concatenar a una variable i una cadena que se evalúa para cada objeto.

aquí está el 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;

}

Me genera un error debido a variables externas deben ser definitiva para ser utilizado en una expresión lambda.
Pero si hago final de la variable que no puede cambiar y el código no funcionará.

¿Alguien tiene una solución?

Publicado el 13/01/2020 a las 23:49
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
2

Puedes 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();

}

Además hay que saber que el uso StringBufferes mejor desde el punto de vista del rendimiento: String son inmutables significa esto que si usted tiene una cadena icada iteración i + "something"crea un nuevo objeto String en la memoria de la asignación de espacio de almacenamiento dinámico para una variable temporal

Respondida el 13/01/2020 a las 23:53
fuente por usuario

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