gpt4 book ai didi

java - 按值对 LinkedHashMap 进行排序

转载 作者:搜寻专家 更新时间:2023-11-01 01:06:06 24 4
gpt4 key购买 nike

如何使用值对 LinkedHashMap 进行排序?

有没有办法将条目插入到 LinkedHashMap 中,以便根据它们的值按顺序插入?

最佳答案

How can you sort a LinkedHashMap using the value?

LinkedHashMap排序,而是按插入顺序排序

如果您的目标是重新排序 map ,您可以做类似的事情

static <K, V> void orderByValue(
LinkedHashMap<K, V> m, final Comparator<? super V> c) {
List<Map.Entry<K, V>> entries = new ArrayList<>(m.entrySet());

Collections.sort(entries, new Comparator<Map.Entry<K, V>>() {
@Override
public int compare(Map.Entry<K, V> lhs, Map.Entry<K, V> rhs) {
return c.compare(lhs.getValue(), rhs.getValue());
}
});

m.clear();
for(Map.Entry<K, V> e : entries) {
m.put(e.getKey(), e.getValue());
}
}

我们将所有条目放入一个 List 中,对 List 进行排序,然后以新顺序将条目放回 Map 中。

这里有一个 Java 8 的翻译:

static <K, V> void orderByValue(
LinkedHashMap<K, V> m, Comparator<? super V> c) {
List<Map.Entry<K, V>> entries = new ArrayList<>(m.entrySet());
m.clear();
entries.stream()
.sorted(Comparator.comparing(Map.Entry::getValue, c))
.forEachOrdered(e -> m.put(e.getKey(), e.getValue()));
}

(出于好奇,可以浓缩为,尽管效率较低):

static <K, V> void orderByValue(
LinkedHashMap<K, V> m, Comparator<? super V> c) {
new ArrayList<>(m.keySet()).stream()
.sorted(Comparator.comparing(m::get, c))
.forEachOrdered(k -> m.put(k, m.remove(k)));
}

Is there a way to insert entries into a LinkedHashMap so that they are inserted in order based on their value?

没有。往上看。 LinkedHashMap 未排序。

如果您的目标是保持 map 排序,您需要使用TreeMap;然而这样做也有问题。 Map 中的条目需要具有唯一值。参见 herehere .

关于java - 按值对 LinkedHashMap 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27114691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com