如何使用Java Stream API从Map提取特定实例变量的值?

时间:2018-08-29 13:31:05

标签: java java-stream

我有一个HashMap,每个键的值都是一个用户定义的对象。该用户定义的对象具有ArrayList类型的变量。如何使用Java流API将ArrayList提取到一个列表中。因此,我的HashMap的大小为3。每个用户定义的对象内部的数组列表的大小为1。最后应该是大小为3的数组列表。

我的对象是

class XYZ{
    List<ABC> list;
} 

我的地图具有值{"1", XYZ_1},{"2",XYZ_2},{"3",XYZ_3}.,我想从每个对象XYZ_1, XYZ_2,XYZ_3提取列表

1 个答案:

答案 0 :(得分:3)

您正在寻找Stream::flatMap

Map<Key, List<CustomClass>> map = new HashMap<>();

List<CustomClass> data = map.values().stream()
        .flatMap(Collection::stream)
        .collect(Collectors.toList());

编辑

由于您的班级内部有一个列表,因此您可以将代码更改为如下形式

Map<KeyClass, CustomClass> map = new HashMap<>();

List<?> data = map.values().stream()
                    .map(CustomClass::getList)
                    .flatMap(List::stream)
                    .collect(Collectors.toList());