如何获取Java嵌套HashMap的内层Integer类型键集合
原数据结构定义
private Map<LocalDate, HashMap<Integer, HashMap<Pair<Long, Long>, String>>> campusDatabase = new HashMap<>();
错误原因
原代码的collect方法参数不全,Stream的三参数collect需要依次传入集合构造器、元素累加逻辑、多集合合并逻辑,仅传入ArrayList::new无法完成元素收集。
正确实现代码
写法1(推荐,简洁易读)
需先导入java.util.stream.Collectors:
ArrayList<Integer> roomNumbers = this.campusDatabase.values().stream() .flatMap(innerMap -> innerMap.keySet().stream()) .collect(Collectors.toCollection(ArrayList::new));
写法2(适配原有写法逻辑,补全collect参数)
ArrayList<Integer> roomNumbers = this.campusDatabase.values().stream() .flatMap(innerMap -> innerMap.keySet().stream()) .collect( ArrayList::new, ArrayList::add, ArrayList::addAll );
简化写法(无需强类型为ArrayList,JDK16+支持)
List<Integer> roomNumbers = this.campusDatabase.values().stream() .flatMap(innerMap -> innerMap.keySet().stream()) .toList();
内容的提问来源于stack exchange,提问作者laila
相关产品推荐
相关产品推荐

