Comment puis-je utiliser une variable externe dans une expression lambda

voix
1

Je suis en train d'utiliser une lambda expression dans une boucle foreach pour concaténer à une variable « i » une chaîne qui est évaluée pour chaque objet.

voici le code

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;

}

Il me renvoie une erreur parce que les variables externes doivent être finale à utiliser dans une expression lambda.
Mais si je fais la variable finale je ne peux pas changer et le code ne fonctionne pas.

Quelqu'un a-t-il une solution?

Créé 13/01/2020 à 21:49
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
2

Vous pouvez utiliser 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();

}

En outre , vous devez savoir que l' utilisation StringBufferest mieux d'un point de vue de la performance: String sont immuables cela signifie que si vous avez une chaîne à ichaque itération i + "something"crée un nouvel objet String dans l'espace de tas allouer de la mémoire pour une variable temporaire

Créé 13/01/2020 à 21:53
source utilisateur

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