• 使用Map排序


    1. Map按值排序

    我们都知道TreeMap可以按key自动排序,有时候我们也会遇到需要按value排序的情况。首先需要明确的一点是, TreeMap无法完成按value排序的功能因此遇到按值排序的需求没有必要使用TreeMap, 因为强行使用TreeMap将会按key排序,这个排序过程对我们的需求没有帮助并且会降低效率。

    一个解决问题的思路是,使用HashMap存储数据,然后大致的思路是把Map的EntrySet转换成list,然后使用Collections.sort排序, 根据排序需求改写comparator

    代码如下

     1 import java.util.*;
     2 
     3 
     4 public class Map按值排序 {
     5     /*
     6     * 大致的思路是把Map的EntrySet转换成list,然后使用Collections.sort排序, 根据排序需求改写comparator*/
     7     public static void main(String[] args) {
     8 
     9         Map<String,Integer> map = new HashMap<>();
    10         map.put("a", 4);
    11         map.put("d", 3);
    12         map.put("b", 2);
    13         map.put("c", 1);
    14 
    15         List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
    16         //按值的升序排列:
    17         //1. 匿名函数写法:
    18 /*        Collections.sort(list,new Comparator<Map.Entry<String,Integer>>() {
    19             //升序排序
    20             public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
    21                 return o1.getValue().compareTo(o2.getValue());//升序
    22                 //return o1.getValue().compareTo(o2.getValue());//降序
    23             }
    24         });*/
    25 
    26         //2. lambda表达式写法:
    27         //按value升序
    28         //Collections.sort(list, (Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)->o1.getValue().compareTo(o2.getValue()));
    29         //按value降序
    30         //Collections.sort(list, (Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)->o2.getValue().compareTo(o1.getValue()));
    31 
    32 //        3.精简写法 默认升序排列,若要按value降序用上面的lambda表达式
    33         Collections.sort(list, Comparator.comparing(Map.Entry<String, Integer>::getValue));
    34 
    35 
    36         for (Map.Entry<String, Integer> e: list) {
    37             System.out.println(e.getKey()+":"+e.getValue());
    38         }
    39 
    40     }
    41 }

    2. TreeMap按key 升序排序

    TreeMap在插入数据的时候是可以通过指定比较器来实现不同的按key排序规则的,默认的规则是按key升序排序,下面的程序可以实现按key降序排序:

     1 import java.util.Comparator;
     2 import java.util.TreeMap;
     3 
     4 public class treeMap按key降序排列 {
     5     public static void main(String[] args) {
     6         //默认的TreeMap升序排列
     7         //重写comparator完成降序排序
     8 //        1.匿名函数
     9         /*        TreeMap<Integer,Integer> map2= new TreeMap<>(new Comparator<Integer>(){
    10          *//*
    11          * int compare(Object o1, Object o2) 返回一个基本类型的整型,
    12          * 返回负数表示:o1 小于o2,
    13          * 返回0 表示:o1和o2相等,
    14          * 返回正数表示:o1大于o2。
    15          *//*
    16             public int compare(Integer a,Integer b){
    17                 return b-a;
    18             }
    19         });*/
    20 
    21 //        2.lambda表达式
    22 //        TreeMap<Integer, Integer> map2 = new TreeMap<>((Integer a, Integer b) -> b - a);
    23 //        简写
    24         TreeMap<Integer, Integer> map2 = new TreeMap<>(Comparator.reverseOrder());
    25 
    26         map2.put(1, 2);
    27         map2.put(2, 4);
    28         map2.put(7, 1);
    29         map2.put(5, 2);
    30         System.out.println("Map2=" + map2);
    31 
    32     }
    33 }
    TALK IS CHEAP, SHOW ME THE CODE
  • 相关阅读:
    03- CSS进阶
    03-requests使用
    04-scrapy简介
    05-scrapy基本使用
    06-CrawlSpider模板
    07-Request、Response
    03-inotify+rsync sersync lsyncd实时同步服务
    markdown中折叠代码
    02-java基础语法
    01-java简介及环境配置
  • 原文地址:https://www.cnblogs.com/greatLong/p/10843331.html
Copyright © 2020-2023  润新知