人生这道选择题 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;
});