使用JAVA 8 Streams从地图中创建仅列出地图值的列表

时间:2016-09-22 12:39:51

标签: java java-8 java-stream

我有一张地图,其中“价值”是项目清单:

Map<User, List<Project>> projectsMap = ...

我想从地图中提取项目,但仅在1个项目列表中提取:

我已经看过答案,但它们不适用于我的情况。 我不想要这个结果:

List<List<Project>> theValueOfTheMap;

我想要的结果是:

List<Project> projects = ... // All the project in the value's map

如何使用JAVA 8 Streams实现这一目标? 谢谢。 莱昂纳多。

3 个答案:

答案 0 :(得分:1)

感谢@Holger的回答。

List<Project> projects = projectsMap.values().stream().flatMap(List::stream)
.collect(‌​Collectors.toList())‌​;

如果值映射中的Collection为Null,则避免NullPointerException的代码:

projectsMap.values().stream().filter(Objects::nonNull)
.flatMap(List::stream).collect(Collectors.toList());

答案 1 :(得分:0)

<title>
  <band height="100">
    <textField evaluationTime="Report">
      <reportElement x="72" y="16" width="100" height="24" uuid="698866c8-7d26-4bc7-8727-b4a56d239a53"/>
      <textFieldExpression><![CDATA[$F{MyField}]]></textFieldExpression>
    </textField>
    ...
  </band>
</title>

答案 2 :(得分:-1)

Map有一个方法可以从中检索所有值。

您只需要调用double来制作地图值的所有对象列表。

编辑:忘了添加flatMap,正如Holger评论的那样。