Java один лайнер для создания списка String, добавления содержимого другого List <String>и возврата List - PullRequest
0 голосов
/ 30 мая 2020

Как создать список строк, затем добавить к нему все содержимое другого списка и затем вернуть этот список ??

Рассмотрим функцию:

public List<String> foo() {
  return Arrays.asList("some", "list", "of", "strings", "from", "foo");
}

Класс MyConstants:

public MyConstants {
  public static final String myConst = "String from Constant File";
}

Я пишу функцию bar() и мне нужен один лайнер для возврата списка:

public List<String> bar() {
    return new ArrayList<String>(Collections.singleTon(MyConstants.myConst)).addAll(foo());
}

Но addAll() возвращает логическое значение. Кроме того, когда я попробовал

Arrays.asList(return new ArrayList<String>(Collections.singleTon(MyConstants.myConst)).addAll(foo()));

, это было List<Boolean> по довольно очевидным причинам.

Как я могу создать список, добавить к нему еще один список, а затем вернуть этот объединенный список?

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Почему на земле ограничение в одну строку? Коллекции Java не подходят для беглых выражений. Но вы можете злоупотреблять потоками:

public List<String> bar() {
    return Stream.concat(Stream.of(MyConstants.myConst), foo().stream()).collect(toList());
}

Менее ужасный способ - использовать библиотеки Guava:

public List<String> bar() {
    return ImmutableList.<String>builder().add(MyConstants.myConst).addAll(foo()).build();
}
0 голосов
/ 30 мая 2020

Благодаря @gene за ответ, я выяснил, что apache -commons менее ужасен, чем построитель Stream или ImmutableList. Вот оно

        return ListUtils.union(Arrays.asList(MyConstants.myConst), foo());

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