gpt4 book ai didi

java - 如何按内部键降序排序嵌套映射,然后按内部值升序排序?

转载 作者:行者123 更新时间:2023-12-01 18:39:38 24 4
gpt4 key购买 nike

我有一个嵌套 map Map<String, Map<String, Integer>例如

("三星", ("注意", 30))

(“三星”,(“银河”,20))

(“苹果”,(“Iphone”,40))

我需要按内部键按字母顺序降序对 map 进行排序(在本例中为模型名称)

如果两个名称相等,那么我必须按升序对内部值进行排序(在本例中为价格)。

到目前为止我的排序是这样的:

map.entrySet().stream.forEach(entry -> entry.getValue().entrySet().stream() .sorted(Comparator.comparing(Map.Entry::getKey, Comparator.reverseOrder()))

我知道我必须添加 .thenComparing() ,但我不知道下一步如何进行。

最佳答案

您编写一个 CustomComparator 如下:

import java.util.*;

public int compare(Object obj1 , Object obj2){

Map<String, Map<String, Integer> > map1 = (Map<String, Map<String, Integer>) obj1;
Map<String, Map<String, Integer> > map2 = (Map<String, Map<String, Integer>) obj2;
Map.Entry e1 = (Map.Entry)map1.entrySet();
Map.Entry e2 = (Map.Entry)map2.entrySet();
String brand1 = (String)e1.getKey();
String brand2 = (String)e2.getKey();
Map.Entry e3 = (Map.Entry)e1.getValue();
Map.Entry e4 = (Map.Entry)e3.getValue();
Integer price1 =(Integer) e3.getValue();
Integer price2 =(Integer) e4.getValue();

if(brand2.compareTo(brand1) != 0){
return brand2.compareTo(brand1);
}else{
price1.compareTo(price2);
}
}
}

此压缩器将首先按品牌名称的降序对数据进行排序,如果两个品牌具有相同的名称,那么它将按价格的升序进行排序。

您必须按如下方式在 TreeMap 中添加数据

设置数据 = new TreeSet(new CustomComparator());
//在数据对象中添加您的数据

关于java - 如何按内部键降序排序嵌套映射,然后按内部值升序排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59964816/

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