Как перебрать массив строк внутри .map () - PullRequest
0 голосов
/ 16 июня 2020

Итак, у меня есть эти строки в методе -

private List<String> buildLwaScopePermissionsList(final List<Permission> permissions) {
       return Optional.ofNullable(permissions).orElse(Collections.emptyList())
               .stream()
               .map(Permission::getName)
               .map(Permission.Name::getValues)
               .collect(collectingAndThen(toList(), ImmutableList::copyOf));
   }

, где Permission - это класс, а Name - это статический c внутренний класс внутри Permission Class, а getName () - нестатический c внутри класса Permission, а getValues ​​() - это stati c метод внутри класса Name. Проблема в том, что метод getValues ​​возвращает массив строк. Я не могу выбрать элемент 1 на 1 из возвращенных значений, объединить с именем и сохранить его в списке.

 public static String[] getValues() {
            return values.clone();
        }

1 Ответ

1 голос
/ 16 июня 2020

Вы можете использовать flatMap для объединения нескольких значений в один поток.

Если у вас есть одно разрешение, вы можете получить поток объединенных имен, выполнив Arrays.stream(Permission.Name.getValues()).map(val -> permission.getName() + val). Используя flatMap, вы можете поместить все эти значения в исходный поток:

private List<String> buildLwaScopePermissionsList(final List<Permission> permissions) {
   return Optional.ofNullable(permissions).orElse(Collections.emptyList())
           .stream()
           .flatMap(permission -> Arrays.stream(Permission.Name.getValues()).map(val -> permission.getName() + val))
           .collect(collectingAndThen(toList(), ImmutableList::copyOf));
}
...