Использование потоков для нулевого безопасного преобразования из массива в список - PullRequest
9 голосов
/ 21 марта 2019

Я ищу краткий способ переписать кусок Java-кода, чтобы он использовал потоки для преобразования массива в список безошибочным способом.Вот оригинальный код:

public MailObject toMailObject(final String[] ccAddresses) {
    final MailObject mailObject = new MailObject();

    // line of code to be altered
    mailObject.setCcAddresses(ccAddresses == null 
        ? Collections.emptyList() : Arrays.asList(ccAddresses));

    // other necessary code

    return mailObject;
}

Я думал о том, чтобы сделать что-то вроде этого:

// psuedocode that obviously doesn't compile
Optional.ofNullable(ccAddresses).SOMETHING.orElse(Collections.emptyList());

, где ЧТО-ТО будет в духе:

Arrays.stream(ints).collect(Collectors.toList());

но я не могу понять синтаксис совершенно правильно.

Этот вопрос был полезен, но точно не решил мою проблему.Кто-нибудь может указать мне правильное направление?Я чувствую, что я рядом ...

Большое спасибо за ваше время.

Ответы [ 2 ]

9 голосов
/ 21 марта 2019

Вы можете использовать map:

List<String> ccAddrs = Optional.ofNullable(ccAddress)
                               .map(Arrays::asList)
                               .orElse(Collections.emptyList())
6 голосов
/ 21 марта 2019

На мой взгляд, код, который у вас есть, отлично читается.Я думаю, что использование Stream для чего-то подобного только усложнит ситуацию.Если вы все еще хотите использовать Stream, то будет работать что-то вроде следующего:

mailObject.setCcAddresses(Stream.ofNullable(ccAddresses)
          .flatMap(Arrays::stream)
          .collect(Collectors.toUnmodifiableList()));

Как вы можете видеть, это более нечитабельно, и я бы не рекомендовал его вместо вашей простой троичнойexpression.


Ваше решение Optional немного более читабельно и выглядит следующим образом:

mailObject.setCcAddresses(Optional.ofNullable(ccAddresses)
          .map(Arrays::asList)
          .orElse(Collections.emptyList()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...