一、對List< Map >中指定鍵對應的值進行排序
// 創(chuàng)建List對象
List<Map<String,Object>> list = new ArrayList<>();
Random random = new Random();
// 循環(huán)添加數(shù)據(jù)
for (int i = 0; i < 10; i++) {
Map<String,Object> map = new HashMap<>();
map.put("id",1);
map.put("name","test"+i);
map.put("age",random.nextInt(100));
list.add(map);
}
System.out.println("排序前:---");
list.forEach(System.out::println);
// 排序的主要邏輯
list.sort((o1,o2) -> {
Integer age = Integer.valueOf(o1.getOrDefault("age",Integer.MIN_VALUE).toString());
Integer age1 = Integer.valueOf(o2.getOrDefault("age",Integer.MIN_VALUE).toString());
// return age.compareTo(age1); // 升序
return age1.compareTo(age); // 降序
});
System.out.println("排序后:---");
list.forEach(System.out::println);
注意:
(1)、升序和降序的主要區(qū)別就是方法中調用compareTo方法的對象不同,其余沒有變化
(2)、Map集合的getOrDefault方法是為了防止出現(xiàn)空指針異常(如果你的數(shù)據(jù)都不為空則可以直接用get方法進行取值)文章來源:http://www.zghlxwxcb.cn/news/detail-598038.html
二、獲取List< Map >中的指定鍵對應的最大值
(1)、可以按上述方法進行降序排序后獲取第一個值
(2)、繼上面的數(shù)據(jù),使用jdk1.8的stream流進行獲取最大值
// 若數(shù)據(jù)中不存在null值
int age = list.stream().mapToInt(m -> (Integer) m.get("age")).max().getAsInt();
// 若數(shù)據(jù)中可能存在null值
int maxAge = list.stream().mapToInt(m -> (Integer) m.getOrDefault("age",Integer.MIN_VALUE)).max().getAsInt();
三、獲取List< Map >中的指定鍵對應的最小值
(1)、按照第一種排序方法進行升序排序后獲取第一個值
(2)、繼上面的數(shù)據(jù),使用jdk1.8的stream流進行獲取最小值
// 若數(shù)據(jù)中不存在null值
int age = list.stream().mapToInt(m -> (Integer) m.get("age")).min().getAsInt();
// 若數(shù)據(jù)中可能存在null值
int age = list.stream().mapToInt(m -> (Integer) m.getOrDefault("age",Integer.MAX_VALUE)).min().getAsInt();
最大最小值獲取注意事項:
(1)、獲取最大最小值主要就是更換了其方法 max()和min()
(2)、獲取最大最小值時Map對象的getOrDefault方法中的默認值記得更換,獲取最大值時:Integer.MIN_VALUE,獲取最小值時:Integer.MAX_VALUE,若數(shù)據(jù)中該字段(鍵)沒有空值則直接使用get方法即可文章來源地址http://www.zghlxwxcb.cn/news/detail-598038.html
四、獲取List< Map >中的指定鍵對應的和以及平均數(shù)
// 獲取和
// 數(shù)據(jù)中可能存在null值
int age = list.stream().mapToInt(m -> (Integer) m.getOrDefault("age",0)).sum();
// 數(shù)據(jù)中不會出現(xiàn)null值
int age = list.stream().mapToInt(m -> (Integer) m.get("age")).sum();
// 獲取平均值
Double avgAge = list.stream().mapToInt(m -> (Integer) m.getOrDefault("age",0)).average().getAsDouble();
// 數(shù)據(jù)中不會出現(xiàn)null值
Double age = list.stream().mapToInt(m -> (Integer) m.get("age")).average().getAsDouble();
到了這里,關于Java中對于List<Map>對象中的相關操作(排序、最大值、最小值、和、平均數(shù))的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!