Map<String, String> map = new HashMap<>(); map.put("a", "A"); map.put("b", "B"); List<AA> list = Arrays.asList( new AA("1", "a"), new AA("b", "b"), new AA("1", "c"), new AA("1", "d")); Map<String, List<String>> typeMap = list.stream().collect(Collectors.groupingBy(AA::getName, Collectors.mapping(o -> map.get(o.getNum()), Collectors.toList()))); typeMap.forEach((k, v) -> System.out.println(k + ":::" + v)); 会出现null在List集合中
时间: 2024-03-20 17:38:39 浏览: 20
在这段代码中,如果 `map` 中不存在某个 `AA` 对象的 `num` 对应的值,那么 `Collectors.mapping(o -> map.get(o.getNum()), Collectors.toList())` 返回的结果是 `null`,因此在 `typeMap` 中会出现 `null` 值。
为了避免出现 `null` 值,可以在 `mapping` 中使用 `Optional` 类型来处理可能返回 `null` 的情况。例如:
```
Collectors.mapping(o -> Optional.ofNullable(map.get(o.getNum())).orElse(""), Collectors.toList())
```
这样,如果 `map.get(o.getNum())` 返回 `null`,则将默认值 `""` 作为结果。
相关问题
List<Map<String, Object>> packList = new ArrayList<Map<String,Object>>(); 遍历
可以使用 for-each 循环或者迭代器(iterator)对象来遍历 `List<Map<String, Object>>` 集合。
使用 for-each 循环遍历 `List<Map<String, Object>>` 集合:
```java
List<Map<String, Object>> packList = new ArrayList<Map<String,Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("name", "张三");
map1.put("age", 20);
packList.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("name", "李四");
map2.put("age", 25);
packList.add(map2);
for (Map<String, Object> map : packList) {
System.out.println("name: " + map.get("name") + ", age: " + map.get("age"));
}
```
使用迭代器(iterator)对象遍历 `List<Map<String, Object>>` 集合:
```java
List<Map<String, Object>> packList = new ArrayList<Map<String,Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("name", "张三");
map1.put("age", 20);
packList.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("name", "李四");
map2.put("age", 25);
packList.add(map2);
Iterator<Map<String, Object>> iterator = packList.iterator();
while (iterator.hasNext()) {
Map<String, Object> map = iterator.next();
System.out.println("name: " + map.get("name") + ", age: " + map.get("age"));
}
```
上述代码中,`List<Map<String, Object>>` 集合中每个元素都是一个 Map 对象,可以根据需要自行修改 Map 对象中的 key 和 value 的类型。
List<Map<String,Object>> list=userMapper.selectListMapById2(id) 循环遍历重新赋值并返回
好的,我理解你的问题是需要对从数据库查询出来的 List<Map<String,Object>> 进行遍历,并且重新赋值后返回。下面是一个示例代码:
```
List<Map<String,Object>> list = userMapper.selectListMapById2(id);
List<Map<String,Object>> result = new ArrayList<>();
for (Map<String,Object> map : list) {
Map<String,Object> newMap = new HashMap<>();
for (String key : map.keySet()) {
Object value = map.get(key);
// 对原始的 value 进行处理,然后重新赋值给 newMap
newMap.put(key, newValue);
}
result.add(newMap);
}
return result;
```
在示例代码中,我们首先从数据库中查询出 List<Map<String,Object>>,然后通过 foreach 循环对每个 Map 进行遍历。在内部循环中,我们对原始的 value 进行处理,并将处理后的值重新赋值给新的 Map(即 newMap)。最后将新的 Map 添加到结果集中,并返回。