【发布时间】:2016-04-26 12:10:18
【问题描述】:
大家好, 我的任务是按嵌套数组大小/长度的降序对 Java Map 进行排序,但嵌套数组在嵌套 Map 内。结构如下:
HashMap<String, HashMap<String, ArrayList<String>>> classes = new HashMap<>();
我正在使用 lambda,我尝试了许多变体,包括:
classes.entrySet().stream()
.sorted((k1, k2) -> Long.compare(classes.get(k2.getKey()).entrySet().stream().count(), classes.get(k1.getKey()).entrySet().stream().count()))
和
classes.entrySet().stream()
.sorted((k1, k2) -> Integer.compare(k2.getValue().values().size(), k1.getValue().values().size()))
但没有任何运气。由于数据的性质,我不能使用其他数据结构,我必须坚持使用这个。
任何想法为什么我的排序失败?感谢您的帮助,我很感激。
【问题讨论】:
-
排序失败的原因是什么?
-
排序返回的是嵌套地图的大小,而不是嵌套地图内的数组大小。
-
classes映射中有多个与键关联的数组。您需要聚合长度值。按平均值、总和、中位数排序?您的示例似乎是根据map的大小而不是包含数组的大小进行排序的。 -
你想在控制台打印什么?所有
ArrayList按大小排序?我还提到Map 不是有序集合。 -
我想以这种方式打印整个结构,以便每个主键都按从键的数组大小排序,例如:
标签: java sorting lambda java-8 java-stream