Hoe kan ik een externe variabele gebruiken in een lambda-expressie

stemmen
1

Ik ben op zoek naar een gebruik van lambda expressie in een forEach lus aaneenschakelen aan een variabele i een string die wordt geëvalueerd voor elk object.

Hier is de 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;

}

Het gooit me een fout omdat externe variabelen moet zijn definitief om te worden gebruikt in een lambda-expressie.
Maar als ik definitief de variabele Ik kan niet veranderen het en de code werkte niet.

Heeft iemand een oplossing?

De vraag is gesteld op 13/01/2020 om 23:49
bron van user
In andere talen...                            


1 antwoorden

stemmen
2

Je kunt gebruiken 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();

}

Daarnaast moet je weten dat het gebruik van StringBufferbeter is uit een oogpunt van prestaties: String zijn onveranderlijk Dit betekent dat als je een string ielke iteratie i + "something"creëert een nieuwe String object in de heap-ruimte toewijzen van geheugen voor een tijdelijke variabele

antwoordde op 13/01/2020 om 23:53
bron van user

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