Java映射-如何将自定义对象列表作为单个列表检索

Java映射-如何将自定义对象列表作为单个列表检索,java,Java,我有以下Java映射,其中的值是自定义类型的列表(EmployeeInfo): Map-myMap; 我的目标是从这个映射中检索所有值作为一个列表。到目前为止,我已经尝试了以下方法,但尚未成功: // ERROR: The constructor ArrayList<EmployeeInfo>(Collection<List<EmployeeInfo>>) is undefined List<EmployeeInfo> info = new Ar

我有以下Java映射,其中的值是自定义类型的列表(EmployeeInfo):

Map-myMap;
我的目标是从这个映射中检索所有值作为一个列表。到目前为止,我已经尝试了以下方法,但尚未成功:

// ERROR: The constructor ArrayList<EmployeeInfo>(Collection<List<EmployeeInfo>>) is undefined
List<EmployeeInfo> info = new ArrayList<EmployeeInfo>(myMap.values());

// ERROR: java.lang.ClassCastException: java.util.HashMap$Values cannot be cast to java.util.List
List<EmployeeInfo> info = (List)myMap.values();
//错误:构造函数ArrayList(集合)未定义
List info=newarraylist(myMap.values());
//错误:java.lang.ClassCastException:java.util.HashMap$值无法转换为java.util.List
列表信息=(列表)myMap.values();

有人能帮忙吗?提前谢谢

您需要检查
myMap
中的每个键,并将当前
列表中的每个元素添加到结果
列表中

List<EmployeeInfo> res = new LinkedList<>(); // Can be any list, not just linkedlist, but linkedlist works best for this.
for(List<EmployeeInfo> l : myMap.values()) {
    for(EmployeeInfo e : l) {
        res.add(e);
    }
}
List res=new LinkedList();//可以是任何列表,不仅仅是linkedlist,linkedlist最适合于此。
对于(列表l:myMap.values()){
对于(员工信息e:l){
增加(e)项决议;
}
}

注意:我是在StackOverflow本身的站点上做的,因此请修复任何小的语法错误。

您需要将
映射
{[e1,e2],[e3,e4]}
转换为
列表
[e1,e2,e3,e4]
。可以通过将值平面映射到列表来实现这一点。以下是一种使用流的方法:

List<EmployeeInfo> list = myMap.values() // gives you [[e1,e2],[e3,e4]]
                               .stream() // stream over them
                               .flatMap(List::stream) // convert to [e1,e2,e3,e4]
                               .collect(Collectors::toList); // collect back
List List=myMap.values()//为您提供[[e1,e2],[e3,e4]]
.stream()//流通过它们
.flatMap(List::stream)//转换为[e1、e2、e3、e4]
.collect(收集器::toList);//收回

就像@Nishant Chatterjee KMS所说的,您需要将这些值展平

下面是一种java 8=<的方法:

mapfoo=newhashmap();
列表栏=新的ArrayList();
foo.values().forEach(bar::addAll);

您需要展平这些值
List<EmployeeInfo> list = myMap.values() // gives you [[e1,e2],[e3,e4]]
                               .stream() // stream over them
                               .flatMap(List::stream) // convert to [e1,e2,e3,e4]
                               .collect(Collectors::toList); // collect back