Преобразование метода в лямбда-выражение - PullRequest
0 голосов
/ 16 июня 2020

У меня есть список, и я хочу преобразовать его в строку с помощью Lambda. Вот пример кода, делающий это обычным способом:

List<Character> list; //list is already populated
String result="";
for(Character c : list){
    result += c.toString();
}
return result;

Я пытаюсь сделать это, используя лямбда, как показано ниже, и, конечно же, выдает ошибку компилятора:

StringBuilder buf = new StringBuilder();
String result = list.forEach(buf->append(c).toString());

Какое правильное лямбда-выражение? (новый для лямбда).

Спасибо

1 Ответ

0 голосов
/ 16 июня 2020
StringBuilder buf = new StringBuilder();
String result = list.forEach(buf->append(c).toString());

Приведенный выше фрагмент кода пытается вызвать метод append, не связанный с buf, что не является тем, что вы хотите сделать (особенно потому, что forEach не возвращает String). Вместо этого вы можете использовать:

StringBuilder buf = new StringBuilder();
list.forEach(buf::append);
String result = buf.toString();

Если бы вы использовали лямбда, то это эквивалентно:

StringBuilder buf = new StringBuilder();
list.forEach(c -> buf.append(c));
String result = buf.toString();

Однако я бы рекомендовал потоковое List, а затем вместо этого собирать его в String:

List<Character> list; //list is already populated
String result = list.stream().map(Character::toString).collect(Collectors.joining());

Если вы хотите явно использовать лямбда вместо ссылки на метод, вы можете изменить Character::toString на c -> c.toString().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...