Метод сбора Java Stream - PullRequest
       8

Метод сбора Java Stream

0 голосов
/ 03 марта 2019

При использовании String :: new в качестве метода поставщика для сбора, я увидел, что выходные данные не собираются и ничего не возвращаются в конце.

Если используется StringBuilder, то работает нормально.

Почему String :: new не может собирать?

List<String> list2 = Arrays.asList("a", "b", "c", "d", "e", "f", "g");

String collect = list2.stream().collect(String::new, (res, elem) -> {
    res = res.concat(elem);
    System.out.printf("res=%s, elem=%s\n", res, elem);
}, (res1, res2) -> {
    System.out.printf("res1=%s, res2=%s\n", res1, res2);
});
System.out.println("collect=" + collect);

Вывод:

res=a, elem=a  
res=b, elem=b  
res=c, elem=c  
res=d, elem=d  
res=e, elem=e  
res=f, elem=f  
res=g, elem=g  
collect=

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Строки неизменны.2-й параметр метода сбора - BiConsumer<R, ? super T> var2 и не возвращает ничего к collect.Этот простой фрагмент кода поможет.

String collect = "hello";
collect.concat("world");
System.out.println(collect);

Вывод: hello, а не helloworld

Для достижения concat используйте команду collect(Collectors.joining(",")

Надеюсь, этопомогает!

0 голосов
/ 03 марта 2019

Второй и третий параметры метода сбора являются потребителями: чтобы использовать их с пользой, необходимо иметь возможность изменять параметры.

Вы не можете делать это со строкой, потому что она неизменна,Вы просто переназначаете лямбда-параметры.

Вместо этого используйте коллектор joining.

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