gpt4 book ai didi

Java 8 HashMap<整数, ArrayList<整数>>

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:11 26 4
gpt4 key购买 nike

我是 Java 8 新手,想根据键对 Map 进行排序,然后在值内对每个列表进行排序。

我试图寻找一种 Java 8 方法来对键和值进行排序。HashMap>映射

map.entrySet().stream().sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));

我能够对 Map 进行排序,我可以收集 map 中的每个值进行排序,但这是我们可以在 java 8 中执行的一种方式,并且可以将两者结合起来。

最佳答案

要按键排序,您可以使用 TreeMap。要对值中的每个列表进行排序,您可以使用 Map.values().forEach() 方法遍历 map 的值,然后使用 List.sort 对每个列表进行排序。把它们放在一起:

Map<Integer, List<Integer>> sortedByKey = new TreeMap<>(yourMap);

sortedByKey.values().forEach(list -> list.sort(null)); // null: natural order

这对每个列表就地进行了排序,这意味着原始列表发生了变化。


如果您不仅要创建一个新 map ,还要为每个值创建新列表,您可以按如下方式进行:

Map<Integer, List<Integer>> sortedByKey = new TreeMap<>(yourMap);

sortedByKey.replaceAll((k, originalList) -> {
List<Integer> newList = new ArrayList<>(originalList);
newList.sort(null); // null: natural order
return newList;
});

编辑:

根据评论中的建议,您可能想要更改:

sortedByKey.values().forEach(list -> list.sort(null));

通过任一:

sortedByKey.values().forEach(Collections::sort);

或者:

sortedByKey.values().forEach(list -> list.sort(Comparator.naturalOrder()));

与使用 null 作为 List.sort 方法的比较器参数相比,以上两个选项中的任何一个都更具表现力并且以更好的方式显示了开发人员的意图.

同样的考虑适用于列表未就地修改的方法。

关于Java 8 HashMap<整数, ArrayList<整数>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51804086/

26 4 0