Как выполнить миграцию с Java 7 на Java 8 - forEach и вернуть List <Object>или ноль, если входное значение равно нулю? - PullRequest
0 голосов
/ 27 сентября 2019

Мой код java7:

List<Argument<?>> args = expression.match(text);
if (args == null) {
    return null;
} else {
    List<Object> list = new ArrayList<>();
    for (Argument<?> arg : args) {
        list.add(arg.getValue());
    }
    return list;
}

Я пытаюсь с stream + flatMap + map + collect

List<Object> list = args.stream().flatMap(arg -> arg.getValue()).collect(Collectors.toSet());...??

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019
  1. Изменить flatMap на map.
  2. Изменить Collectors.toSet() на Collectors.toList().
  3. Я предполагаю, что проверка args == nullсделано до args.stream().В противном случае вы можете получить NPE.

List<Argument<?>> args = expression.match(text);
return args == null ?
        null :
        args.stream().map(arg -> arg.getValue()).collect(Collectors.toList());

Однако я не сторонник возвращения null.Вы можете вернуть Collections.emptyList() или Optional.empty().

1 голос
/ 27 сентября 2019

Используйте map вместо flatMap:

return (args == null) ? null : args.stream()
        .map(arg -> arg.getValue())
        .collect(Collectors.toList()); //modified

Примечание : Не присваивайте / не возвращайте null для List<T>, используйте Collections.emptyList() вместо.

...