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 19:38:39 浏览: 71
在这段代码中,如果 `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`,则将默认值 `""` 作为结果。
相关问题
Map<String,String> map = new HashMap<String,String>(); map.put("a"); map.put(0); List <Map<Sring,String>> map = Arrays.aslist(a); return a;
很抱歉,您给出的代码段中存在语法错误。Map<String, String> map = new HashMap<String, String>(); 中的键和值都应该是 String 类型,并且 map.put() 方法需要传递键和值两个参数。此外,List<Map<Sring, String>> map = Arrays.asList(a); 中的泛型参数也存在拼写错误(应为 String 而非 Sring)。请修改代码后再进行提问,我会尽力回答。
解释代码 List<Map<String, String>> originalList = ... // 原始数组 Map<String, Map<String, String>> tempMap = new HashMap<>(); for (Map<String, String> map : originalList) { String b = map.get("b"); if (tempMap.containsKey(b)) { Map<String, String> mergedMap = tempMap.get(b); String c = mergedMap.get("c") + "," + map.get("c"); mergedMap.put("c", c); } else { tempMap.put(b, map); } } List<Map<String, String>> newList = new ArrayList<>(tempMap.values());
这是一段 Java 代码,其实现的功能为将原始数组中相同键值("b")的 Map 对象进行合并,最终返回一个合并后的 Map 集合。具体实现方式为将原始数组遍历一遍,将相同键值的 Map 对象合并,保存在一个临时的 Map 集合中,最后将临时 Map 集合中的所有值取出,放入新的 ArrayList 中作为返回结果。
阅读全文