【发布时间】:2011-04-26 07:07:33
【问题描述】:
我有一个返回 List<Map<String,Object>> 的方法。
如何遍历 List<Map<String,Object>> 这样的列表?
【问题讨论】:
-
如果你有选择,尽量避免像这样的过于复杂的嵌套集合数据结构,以支持创建一个新类。如果其他程序员遇到您的 List
我有一个返回 List<Map<String,Object>> 的方法。
如何遍历 List<Map<String,Object>> 这样的列表?
【问题讨论】:
听起来你正在寻找这样的东西:
List<Map<String, Object>> list; // this is what you have already
for (Map<String, Object> map : list) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
}
}
【讨论】:
List<Map<String, Object>> list = getMyMap();
for (Map<String, Object> map : list) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
【讨论】:
map,列表中的值应该是Map<String, Object>。
使用 java 1.8 (8) 你可以像这样重写它:
list.forEach(item ->
item.forEach((k, v) -> System.out.println(k + ": " + (String)v)
);
【讨论】:
我将向您发布List<Map<String,Object>> 的一个简单示例。
public static void main(String[] args){
Map<String,Object> map1 = new HashMap<>();
map1.put("Map1 Key1", (Object) "Map1 value1");
map1.put("Map1 Key2", (Object) "Map1 value2");
Map<String,Object> map2 = new HashMap<>();
map2.put("Map2 Key1", (Object) "Map2 value1");
map2.put("Map2 Key2", (Object) "Map2 value2");
List<Map<String,Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
list.stream().forEach(mapsData->{
mapsData.entrySet().forEach(mapData->{
System.out.println("Key:"+mapData.getKey()+ " Value:"+mapData.getValue());
});
});
}
【讨论】:
Map<String, String> map = new HashMap<>();
map.put("First", "1");
map.put("Second", "2");
map.put("third", "3");
map.put("four", "4");
// here is the logic
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
【讨论】:
这是一种迭代地图列表的简单方法,作为我的起点。我的列表里面有一个 Map 对象,里面有 3 个值
List<Map<String, Object>>
以相当简洁的方式使用 Java 的函数式编程。这里的目的是取出存储在列表中的所有地图并将它们打印出来。我也可以收集价值等。
answerListOfMaps.stream().map(map -> map.entrySet())
.forEach(System.out::println );
Eclipse IDE 控制台中的输出如下所示:
[isAllowed=true, isValid=true, cardNumber=672xxxxxxxxxxx]
x 用于混淆
另一种方式:
answerListOfMaps.stream().flatMap(map -> map.entrySet().stream())
.forEach( entry -> System.out.println(entry.getKey() + ":" + entry.getValue()) );
控制台:
isAllowed:true
isValid:true
cardNumber:672xxxxxxxxxxx
【讨论】: