Java 8 在Java 8中:生成集合<;V>;在所有列表中属于地图值的对象中<;K、 列表<;V>&燃气轮机;

Java 8 在Java 8中:生成集合<;V>;在所有列表中属于地图值的对象中<;K、 列表<;V>&燃气轮机;,java-8,java-stream,Java 8,Java Stream,我正在学习使用Java8和Stream做事情。我有一个问题,我正试图用java8流解决这个问题 我有一张类型为Map accountMap 数据-{0000132861=[661361706206],0000135932=[661361706206],0000122989=[661361706206],0000138372=[31876613816761706206],0000138399=[661361706206] 我需要Map.value()中的所有唯一整数值。 比如[3187661381

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

我有一张类型为
Map accountMap
数据-
{0000132861=[661361706206],0000135932=[661361706206],0000122989=[661361706206],0000138372=[31876613816761706206],0000138399=[661361706206]

我需要Map.value()中的所有唯一整数值。 比如
[31876613816761706206]

当我执行
accountMap.values()
时,我得到
List
[[661361706206],[661361706206],[661361706206],[31876613816761706206],[661361706206]。

当我执行
accountUserMap.values().stream().collect(Collectors.toSet())
时,我会得到相同的数据类型
Set[[31876613816761706206],[661361706206]
,但所有重复列表都会被删除

我想删除所有重复的值,并想获得
Set[31876613816761706206]


应该有一种有效的方法来实现这一点,而无需使用.forEach()或迭代列表。

您可以使用
flatMap
来“展平”值流:

map.values().stream()
    .flatMap(List::stream)
    .collect(toSet());
或者,您可以使用3参数
collect

map.values().stream()
    .collect(HashSet::new, Set::addAll, Set::addAll);

您可以使用
flatMap
来“展平”值流:

map.values().stream()
    .flatMap(List::stream)
    .collect(toSet());
或者,您可以使用3参数
collect

map.values().stream()
    .collect(HashSet::new, Set::addAll, Set::addAll);

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

stream().flatMap(p -> p.stream())
打开下一级列表


这就是在类似的上下文中所显示的内容

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

stream().flatMap(p -> p.stream())
打开下一级列表

在类似的情况下,这也表明了这一点