成为很厉害很厉害的人,最重要的,就是要热血,永远也不要让你的血凉下去。

人生这道选择题 01 随笔

如果吃苦能挣钱,那农名都成千万富翁了

先说说近况吧;
目前是2023-04-19:时隔两个星期终于有时间补上未完成的随笔之一了,这两个星期内做了很多需求,目前都进入了测试环节;
特此抽出时间,写篇随笔刻录脑子里的知识;
时间总是不等人的;
不温不饱,离理想甚是遥远;

目录

  针对List和Map的排序

Map

List


Map

在实际开发过程中,获取的数据经过处理可选存库后前端展示->如何处理?->什么使用场景

map的key排序
进行了多层调试方案,key为‘一’、‘二’、‘三’的会失效;准确来说算不上失效,而是因为【ASCII码表和Unicode码表】‘一’《》‘yi’、二《》‘er’、三《==》‘san’
看代码时注意注解
1、使用了maps封装工具 导入maven

 <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
 </dependency>

2、init初始数据0.1

    public static Map<String, JSONObject> initMap() {
        Map<String, JSONObject> map = Maps.newHashMap();
        JSONObject j1 = new JSONObject();
        j1.put("id", "1");
        j1.put("name", "乐乐");
        j1.put("createTime", "2023-04-15");
        JSONObject j2 = new JSONObject();
        j2.put("id", "2");
        j2.put("name", "阿方");
        j2.put("createTime", "2023-04-16");
        JSONObject j3 = new JSONObject();
        j3.put("id", "3");
        j3.put("name", "晃动");
        j3.put("createTime", "2023-04-17");
        JSONObject j4 = new JSONObject();
        j4.put("id", "4");
        j4.put("name", "家伟");
        j4.put("createTime", "2023-04-18");
        map.put("2023-04-16", j1);
        map.put("2023-04-18", j2);
        map.put("2023-04-17", j3);
        map.put("2023-04-19", j4);
        return map;
    }

3、按key降序排序 || 按key升序排序 四种写法,同一实现,1、2简洁、3、4了解

      Map<String, JSONObject> map = initMap();


        //降序排序 Map.Entry.<String,JSONObject>comparingByKey().reversed()
        System.out.println("\n\n\nkey的降序排序");
        Map<String, JSONObject> ascOrderKeyMap = Maps.newLinkedHashMap();
        map.entrySet().stream().sorted(Map.Entry.<String,JSONObject>comparingByKey().reversed())
                .forEachOrdered(e -> ascOrderKeyMap.put(e.getKey(), e.getValue()));
        ascOrderKeyMap.entrySet().forEach(System.out::println);
        System.out.println("\n\n\nkey的升序排序");


        //升序排序 Map.Entry.comparingByKey()
        Map<String, JSONObject> ascOrderKeyMap2 = Maps.newLinkedHashMap();
        map.entrySet().stream().sorted(Map.Entry.comparingByKey())
                .forEachOrdered(e -> ascOrderKeyMap2.put(e.getKey(), e.getValue()));
                ascOrderKeyMap2.entrySet().forEach(System.out::println);


        //降序排序 Map.Entry.<String,JSONObject>comparingByKey().reversed()
        Map<String, JSONObject> ascOrderKeyMap3 = map.
                entrySet().stream().sorted(Map.Entry.<String,JSONObject>comparingByKey().reversed())
                .collect(Collectors
                        .toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new));
        System.out.println("\n\n\nkey的降序排序");
        ascOrderKeyMap3.entrySet().forEach(System.out::println);

        
        //升序排序 Map.Entry.comparingByKey()
        Map<String, JSONObject> ascOrderKeyMap4 = map.
                entrySet().stream().sorted(Map.Entry.comparingByKey())
                .collect(Collectors
                        .toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new));
        System.out.println("\n\n\nkey的升序排序");
        ascOrderKeyMap4.entrySet().forEach(System.out::println);

4、封装思想

         /**
     * 切记:<K,V>只能使用基本数据类型的包装类和Date、String这两种引用类型
     * @param map
     * @param isKey 是否 按照key排序
     * @param isDesc 是否 倒序
     * @param <K>
     * @param <V>
     * @return
     */
    public static <K extends Comparable<? super K>, V extends Comparable<? super V>> Map<K, V> orderByKey2(Map<K, V> map, boolean isKey, boolean isDesc) {
        if (CollectionUtil.isEmpty(map)) {
            return map;
        }

        Map<K, V> result = Maps.newLinkedHashMap();
        if (isKey) {
            if (isDesc) {
                map.entrySet().stream().sorted(Map.Entry.<K, V>comparingByKey().reversed())
                        .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
            } else {
                map.entrySet().stream().sorted(Map.Entry.comparingByKey())
                        .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
            }
        } else {
            if (isDesc) {
                map.entrySet().stream().sorted(Map.Entry.<K, V>comparingByValue().reversed())
                        .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
            } else {
                map.entrySet().stream().sorted(Map.Entry.comparingByValue())
                        .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
            }
        }
        return result;
    }


List

   对List排序 又两种场景 1.自身、2.分组后得到的List

1、案例

//倒序
 Collections.sort(v, (o1, o2) -> {
                Integer i = o2.compareTo(o1);
                return i;
            });
//三段排序
Collections.sort(studentList, (o1, o2) -> {
            //先按照年龄排序
            Integer i = o1.getAge().compareTo(o2.getAge());
            if (i == 0) {
                //如果年龄相等,则按照分数排序
                i = o1.getScore().compareTo(o2.getScore());
                if (i == 0) {
                    //如果分数相等,则按照姓名排序
                    i = o1.getName().compareTo(o2.getName());
                }
            }
            return i;
        });
posted @ 2023-03-30 16:34  顾留芳啊  阅读(23)  评论(0编辑  收藏  举报