Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java—在复杂对象集合上循环_Java_Loops_Arraylist_Collections_Linkedhashmap - Fatal编程技术网

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
    组成,我正试图从中提取值
  • 我尝试了各种循环来获得密钥、值对,但没有运气,比如
物体看起来像

集合dsidsToExclude=Arrays.asList(param.get(“idsToExclude”); for(对象id:dsidsToExclude){ if(ArrayList的id实例){ //循环浏览 用于(对象kv:id){ //我想在这里提取kv对。。 } } } 我想知道什么是最有效的方法,有什么建议吗?谢谢。

数组。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()
));
}