-1

我的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(...??
4

3 回答 3

1

flatMap需要一个返回流作为参数的函数

return packagesName.stream()
    .flatMap(packageName -> new Reflections(packageName,
            new SubTypesScanner(false)).getSubTypesOf(Step.class).stream())
    .collect(Collectors.toSet());
于 2019-09-27T11:26:26.860 回答
1

您可以使用Arrays::streamString数组转换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.

于 2019-09-27T11:36:51.087 回答
-1

无权访问 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);
  }
}
于 2019-09-27T11:43:45.910 回答