列表包含要在java中使用lambda设置的另一个列表

时间:2015-10-07 17:21:39

标签: java list arraylist lambda

我有一个包含人物的列表,每个人都有一个包含他的主题的列表。

我需要使用lambda返回一个包含每个主题的Set,到目前为止我已经尝试过了:

MyModelAdmin

但那会让我得到一个List>所以我不能用它。

我如何使用lambdas打印/获取每个人的列表中的每个字符串?

感谢。

2 个答案:

答案 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;嵌套集合。