Wie kann ich eine externe Variable in einem Lambda-Ausdruck verwenden

stimmen
1

Ich versuche , einen verwenden Lambda - Ausdruck in einer foreach - Schleife auf eine Variable „i“ eine Zeichenfolge verketten , die für jedes Objekt ausgewertet wird.

hier ist der 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;

}

Es wirft mir einen Fehler , da externe Variablen sein muss final in einem Lambda - Ausdruck verwendet werden.
Aber wenn ich endgültig die Variable machen kann ich nicht ändern es und der Code nicht funktioniert.

Hat jemand eine Lösung?

Veröffentlicht am 13/01/2020 um 23:49
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Sie können verwenden 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();

}

Darüber hinaus müssen Sie wissen , dass die Verwendung von StringBufferbesser von einer Performance - Sicht: String sind unveränderlich bedeutet dies , dass , wenn Sie einen String haben ijede Iteration i + "something"ein neues String schafft Objekt im Heap - Speicher Zuweisung Speichern für eine temporäre Variable

Beantwortet am 13/01/2020 um 23:53
quelle vom benutzer

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