Java—在复杂对象集合上循环
我有一个关于在包含复杂对象的集合上循环的一般性问题Java—在复杂对象集合上循环,java,loops,arraylist,collections,linkedhashmap,Java,Loops,Arraylist,Collections,Linkedhashmap,我有一个关于在包含复杂对象的集合上循环的一般性问题 我有一个集合,其中包含一个数组,该数组由LinkedHashMap组成,我正试图从中提取值 我尝试了各种循环来获得密钥、值对,但没有运气,比如 物体看起来像 集合dsidsToExclude=Arrays.asList(param.get(“idsToExclude”); for(对象id:dsidsToExclude){ if(ArrayList的id实例){ //循环浏览 用于(对象kv:id){ //我想在这里提取kv对。。 } }
- 我有一个
,其中包含一个集合
,该数组由数组
组成,我正试图从中提取值LinkedHashMap
- 我尝试了各种循环来获得密钥、值对,但没有运气,比如李>
数组。asList(something)
将生成包含一个元素的列表。你不需要这样做
Object object = param.get("idsToExclude");
您可以选中对象并将其强制转换为列表
if (object instanceof List) {
List list = (List) object;
}
列表中的每一项都需要检查和转换
for (Object item : list) {
if (item instanceof Map) {
Map map = (Map) item;
}
}
您可以从映射项中获取键和值
Object key = map.getKey();
Object value = map.getValue();
完整示例:
Object object = param.get("idsToExclude");
if (object instanceof List) {
List list = (List) object;
for (Object item : list) {
if (item instanceof Map) {
Map map = (Map) item;
Object key = map.getKey();
Object value = map.getValue();
// You can cast key and value to other object if you need it
}
}
}
只要输入集合的内容可以指定为
collection
(注意使用接口List
和Map
,而不是实现ArrayList
和LinkedHashMap
),则更适合实现用K键入的通用方法,V
要摆脱实例和显式强制转换:
公共静态剂量测量(采集输入){
用于(列表:输入){
用于(地图:列表){
对于(Map.Entry:Map.entrySet()){
//对entry.getKey()和entry.getValue()执行所需操作
}
}
}
}
类似地,方法forEach
可用于收集、列表和映射:
publicstaticdosomethingforeach(采集输入){
input.forEach(列表->
list.forEach(地图->
map.forEach((k,v)->//使用键k和值v执行所需操作
System.out.printf(“键:%s->值:%s%n”,k,v);
);
)
);
}
此外,还可以使用流API,特别是flatMap
来访问所有最里面的映射的内容。可选地,null
值可以如下所示进行过滤
publicstaticdosomethingstream(采集输入){
input.stream()//流
.filter(Objects::nonNull)//放弃集合中的null项
.flatMap(列表::流)//流
.filter(Objects::nonNull)//放弃列表中的空项
.flatMap(map->map.entrySet().stream())//流
.forEach(e->System.out.printf(
“键:%s->值:%s%n”,e.getKey(),e.getValue()
));
}