我有一个类似于以下内容的HashMap:
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(3, 2);
map.put(7, 2);
map.put(5, 1);
map.put(10, 4);
(5, 1)
(3, 2)
(7, 2)
(10, 4)
有什么建议吗?
我首先比较值,只有在值重复的情况下才比较键。所以我同时使用键和值,而不仅仅是值。
您可以使用streams API来实现它:
LinkedHashMap<Integer, Integer> resultSet =
map.entrySet().stream()
.sorted(Map.Entry.<Integer, Integer>comparingByValue()
.thenComparing(Map.Entry.comparingByKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldValue, newValue) -> oldValue, LinkedHashMap::new));
排序的中间操作可以采用比较器
实例,在本例中为:
Map.Entry.<Integer, Integer>comparingByValue()
.thenComparing(Map.Entry.comparingByKey())
即,通过映射值进行比较,如果两个给定值相同,则通过键进行比较。
注意合并函数(oldValue,newValue)->oldValue
在本例中是毫无意义的,因为流的源(map.entrySet()
)永远不会包含重复的键。但是,我们仍然需要它,否则我们不能为新值指定累加器的类型,在本例中,为LinkedHashMap
实例来维护插入顺序。
您可能还希望查看toMap方法,以获得有关它如何工作的更多信息。
问题内容: 在发现了惊人的发现之后,我再次陷入了困境。 问题是我有一个形式的字典,我需要按其整数值的降序对其进行排序, 但是 如果两个元素的值相同,则按键的升序排列。 一个使它更清楚的例子: 经过研究后,我得出以下结论: 这是因为它对值和键都进行了反向排序。我需要不撤消的钥匙。 问题答案: 就像是
问题内容: 我有一个带有数字值的字符串键数组,可用于具有每个标签出现次数的标签列表中,因此: 这是为了我可以按降序显示标签列表,因此: 我可以使用 arsort 通过出色的值进行反向排序,但是我还希望具有相同数字值的所有标签都按字母顺序排序,因此最终结果可以是: 有办法可以做到吗?我猜想 usort 可能是要走的路,但是我看了php.net上的示例,我的眼睛呆呆了!非常感谢!!! 问题答案: 看一
(“Samsung”,(“Galaxy”,20)) (“苹果”,(“iPhone”,40)) 我需要按照内部键的字母顺序对映射进行降序排序(在这个例子中是模型名) 我到目前为止的排序是这样的: Map.EntrySet().Stream.Foreach(entry->entry.GetValue().EntrySet().Stream().Sorted(Comparator.Comparative
我的问题是如何根据值和键对内容进行排序,并得到一个? 首先,条目需要按值降序排序,如果值发生冲突,也要按键降序排序。 给定的示例: 预期订单:
问题内容: 我只想使用Collections.sort或Arrays.sort首先按x然后按y对点列表(Point类)进行排序。 我有一个像这样实现Comparable的Ponto类: 但是现在我也想在x之后按y排序。 如何通过修改上面的代码来做到这一点?还是这是一种更好且“干净”的 方法?我还使用了将此代码传递给C ,在C 中,我 使用等效的可比较方法创建了一个称为Point的结构。 问题答案:
问题内容: 如何根据值对字典进行排序,以便输出为: 当前尝试(排序不正确): 问题答案: 您需要对字典值而不是键进行排序。您可以从字典中创建一个元组数组,按其值对它进行排序,如下所示: Xcode 9•Swift 4 或 Xcode 8•Swift 3 使用按键对字典进行排序 使用字典的键和本地化的比较来对字典进行排序: