我有一个包含人物的列表,每个人都有一个包含他的主题的列表。
我需要使用lambda返回一个包含每个主题的Set,到目前为止我已经尝试过了:
MyModelAdmin
但那会让我得到一个List>所以我不能用它。
我如何使用lambdas打印/获取每个人的列表中的每个字符串?
感谢。
答案 0 :(得分:5)
list.stream().map(person -> person.getSubjects().stream());
不是List
,而是Stream
。如果您想要Set
,请执行以下操作:
list.stream().flatMap(person -> person.getSubjects().stream()).collect(Collectors.toSet());
这将创建HashSet<Subject>
。请注意,使用flatMap
代替map
将主题列表展平为单个流。如果您想要Set
的其他实现,例如TreeSet
,请执行以下操作:
list.stream().flatMap(person -> person.getSubjects().stream())
.collect(Collectors.toCollection(TreeSet::new));
答案 1 :(得分:1)
您可以使用flatMap:
Set<Subject> subjects = list.stream()
.map(person -> person.getSubjects())
.flatMap(subjects -> subjects.stream())
.collect(Collectors.toSet());
flatMap适用于&#34;展平&#34;嵌套集合。