Jak mohu použít externí proměnné ve výrazu lambda

hlasů
1

Snažím se používat lambda výraz v foreach smyčce zřetězit proměnné „i“ řetězec, který je vyhodnocován pro každý objekt.

Zde je kód

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;

}

Je mi hází chybu, protože externích proměnných, musí být konečná , které mají být použity v lambda výrazu.
Ale když udělám závěrečný proměnná nemohu změnit jej a kód nefunguje.

Má někdo řešení?

Položena 13/01/2020 v 23:49
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
2

Můžeš použít 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();

}

Kromě toho musíte vědět, že používání StringBufferje lepší z hlediska výkonu: String jsou neměnné To znamená, že pokud máte řetězec ikaždé iteraci i + "something"vytvoří nový řetězec objekt v přidělování paměti haldy prostor pro dočasné proměnné

Odpovězeno 13/01/2020 v 23:53
zdroj uživatelem

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