Миграция Java 7 в Java 8 - forEach и addAll в комплекте? - PullRequest
0 голосов
/ 27 сентября 2019

Мой код java7:

String[] packagesName = ...
final Set<Class<?>> result = new HashSet<>();
for (final String packageName : packagesName) {
    result.addAll(new Reflections(packageName, new SubTypesScanner(false)).getSubTypesOf(Step.class));
}
return result;

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

packagesName.stream().flatMap(packageName -> new Reflections(packageName, new SubTypesScanner(false)).getSubTypesOf(Step.class)).collect(...??

Ответы [ 3 ]

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

Вы можете использовать Arrays::stream для преобразования String массива в Stream строк, а затем использовать Stream::flatMap и собрать в Set, используя Collectors.toSet:

Set<Class<?>> result = Arrays.stream(packagesName)
                .flatMap(packageName -> new Reflections(packageName, new SubTypesScanner(false)).getSubTypesOf(XPath.Step.class).stream())
                .collect(Collectors.toSet());

Конечно, в этом случае вы также можете использовать Stream.of вместо Arrays.stream.

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

flatMap нужна функция, которая возвращает поток в качестве параметра

return packagesName.stream()
    .flatMap(packageName -> new Reflections(packageName,
            new SubTypesScanner(false)).getSubTypesOf(Step.class).stream())
    .collect(Collectors.toSet());
0 голосов
/ 27 сентября 2019

Нет доступа к Step.class, просто как иллюстрация!

import com.google.common.collect.ImmutableList;
import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner;
import java.util.Collection;
import java.util.Set;
import java.util.stream.Collectors;

public class SO58133558 {
  public static void main(String[] args) throws Exception{

    final Set<Class<?>> result = ImmutableList.of("java.sql","java.lang").stream().
            map(packageName -> {
              return new Reflections(packageName, new SubTypesScanner(false)).
                      getSubTypesOf(Object.class);
            }).flatMap(Collection::stream).collect(Collectors.toSet());
    System.out.println(result);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...