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