Java 8 - 使用Set <?>类型作为一组值收集List属性

And*_*sky 3 java java-8

我有一个List<Entity> entites;实体,其中有一个名为testField的字段,其中包含Set类型:

class Entity {
    Set<String> testField;
}
Run Code Online (Sandbox Code Playgroud)

我想得到entites列表中所有testField集合中包含的所有String; 所以,如果我不使用java 8我的代码看起来很简单:

Set<String> allTestFieldString = newHashSet();
for(Entity entity : entities) {
    allTestFieldString.addAll(entity.testField);
}
Run Code Online (Sandbox Code Playgroud)

以下代码不能为我编译:

entites.stream().map(entity -> entity.testField()).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助,谢谢!

Era*_*ran 6

您需要flatMap生成所有集合中所有元素的Stream testField:

Set<String> allTestFieldString = entites.stream().flatMap(entity -> entity.testField.stream()).collect(Collectors.toSet())
Run Code Online (Sandbox Code Playgroud)