当前位置: 首页 > 知识库问答 >
问题:

在Java8中:从所有列表中的对象中创建一个集合,这些对象是映射

庞彬
2023-03-14

我正在学习使用Java8和Stream做事情。我有一个问题,我正试图用java8流解决这个问题。

我有一个地图类型地图

我想要地图中所有唯一的整数值。value()。比如[31876613816761706206]

当我做帐户ap.values()我得到列表

当我执行accountUserMap时。值()。流()。collect(Collectors.toSet())我得到了相同的数据类型Set

我想删除所有重复的值,并想设置

应该有一种有效的方法来做到这一点,而不使用。forEach()或迭代列表。


共有2个答案

蒋嘉颖
2023-03-14

我本人从未使用过streams,但与其在上面的代码中只使用stream(),不如尝试:

stream().flatMap(p -> p.stream())

打开下一级列表。

这就是这个答案在类似情况下所暗示的

莫翰藻
2023-03-14

您可以使用flattMap来扁平化值流:

map.values().stream()
    .flatMap(List::stream)
    .collect(toSet());

或者,您可以使用3参数收集

map.values().stream()
    .collect(HashSet::new, Set::addAll, Set::addAll);
 类似资料:
  • 我试图理解Java8流。我有两门课: 以及: 字段应指示全天的卡路里总量是否为。该字段与当天的所有条目相同。 我试图从

  • 我有一个Java类,它有20个属性及其相应的getter和setter。还有两个对象列表:和。 使用Java 8: 但是我必须在哪个地方指定属性呢?是否应该重写和方法?

  • 我有一个对象列表(文件夹)。该列表中的每个对象A都有一个对象B(合作伙伴)列表,对象B也有一个对象C(人员)列表。对象C包含一个属性代码,我想用它来使用Java8进行过滤。 我试过下面的代码,但它似乎不工作: 你们知道我如何使用FlatMap从

  • 我有一个学生名单a和学生名单B。 学生对象包含如下字段:否、年龄、城市、出生日期、工资 我的列表A包含这些对象 我的列表B包含这些对象 我想做的是提取ListA有但listB没有的学生对象,以及ListA和listB有但薪水不同的学生对象(如否、年龄、城市)。我还想写工资差异。 我想在java 8中使用流api。首先,我想将students对象提取到列表中,但我现在可以提取常见的student对象

  • 我有一个对象的arraylist,其中有一个字段“name”,还有一个名称列表。我必须从列表中选择包含任何名称的所有对象。如何在java中最有效地实现这一点。任何代码片段都将受到高度赞赏。 例子: 让类名为 A由id、name、subject等字段组成。 那么让我们假设我有一个列表 所以假设我有第二个列表 因此,我只想从objectsA列表中选择那些名称字段由名称列表中的名称组成的对象,也就是说,