根据Value对Map中的对象进行排序
背景
SortedMap的实现类TreeMap可以按自然顺序或自定义顺序遍历键(key),有时我们需要根据值(Value)进行排序,本文提供了一种简单实现思路。
实现
-
Comparator接口
使用Value排序时,仍然使用TreeMap实现类,只不过需要在TreeMap的构造函数中引入Comparator实现。 -
TreeMap构造器
ValueComparator是Comparator接口的实现,该实现包含了一个普通的Map对象作为成员变量,并在compare方法中做了一点手脚。即在compare方法中,将key的比较转换为value的比较。 - 局限性
这种方式只能对Map进行排序,而不能添加单个key-value映射。
-
具体实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; /** * Created by liutingna on 2017/9/30. */ public class TestComparator { class ValueComparator implements Comparator<String> { Map<String, Long> base; //Comparator外部比较器 public ValueComparator(Map<String, Long> base) { this .base = base; } //根据Map的值进行比较 public int compare(String a, String b) { return base.get(a).compareTo(base.get(b)); } } public static void main(String[] args) { Map<String, Long> map = new HashMap<>(); TestComparator testComparator = new TestComparator(); TestComparator.ValueComparator valueComparator = testComparator. new ValueComparator(map); Map<String, Long> keySortMap = new TreeMap<>(); Map<String, Long> valueSortMap = new TreeMap<>(valueComparator); map.put( "aaa" , 15L); map.put( "bxw" , 13L); map.put( "abc" , 14L); map.put( "bbb" , 18L); System.out.println(map); //{aaa=15, bxw=13, abc=14, bbb=18} //根据key进行比较 keySortMap.putAll(map); System.out.println(keySortMap); //{aaa=15, abc=14, bbb=18, bxw=13} //根据value进行比较 valueSortMap.putAll(map); // valueSortMap.put("ccc",17L);//NullPointerException,这种方式只能对Map进行排序,而不能添加单个key-value映射 System.out.println(valueSortMap); //{bbb=18, aaa=15, abc=14, bxw=13} } } |
相关资料
----
ITRoad,记录与分享学习历程
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步