java中分組統(tǒng)計的三種實現(xiàn)方式
平時工作中,很多時候都會用到對數(shù)據(jù)進(jìn)行分組操作,例如一個學(xué)生對象,有班級、名字、性別、分?jǐn)?shù)等,需要按班級分組統(tǒng)計,該怎么操作呢?一個合理的算法可以提升不少效率。
大家看一下下面的案例:
//下面是初始化的數(shù)據(jù)
List<Student> list = new ArrayList<Student>();
Student student1 = new Student("李四1", "女", "一班");
Student student2 = new Student("李四2", "女", "一班");
Student student3 = new Student("李四3", "女", "一班");
Student student4 = new Student("李四4", "男", "一班");
Student student5 = new Student("李四5", "男", "一班");
Student student6 = new Student("李四6", "男", "二班");
Student student7 = new Student("李四7", "男", "二班");
Student student8 = new Student("李四8", "男", "二班");
Student student9 = new Student("李四9", "男", "二班");
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student4);
list.add(student5);
list.add(student6);
list.add(student7);
list.add(student8);
list.add(student9);
1.合理利用map操作
在實際開發(fā)中合理的利用map自帶的方法,能解決很多問題
for (Student stu : list) {
if (!map.containsKey(stu.getProvinceCode())) {
ArrayList<ArrearageDeal> al = new ArrayList<ArrearageDeal>();
map.put(stu.getProvinceCode(), al.add(stu));
} else {
map.get(stu.getProvinceCode()).add(stu);
}
}
2.利用guava的Multimap
Multimap<String, Student> mulMap = ArrayListMultimap.create();
for (Student stu : list) {
mulMap.put(stu.getGrade,stu);
}
3.使用jdk8新特性–不要排斥新東西
畢竟java14都出來了,java8的新特性還是需要多了解
//一行就可以解決 Map<String, List<Student >> collect = list.stream().collect(Collectors.groupingBy(ArrearageDeal::getGrade));
上面三種當(dāng)時從代碼量上來看,java8的最簡潔。但是實際開發(fā)中結(jié)合具體場景來說2、3兩種都是不錯的選擇。
Java8 多個字段分組統(tǒng)計
// 分組統(tǒng)計
Map<String, Long> countMap = records.stream().collect(Collectors.groupingBy(o -> o.getProductType() + "_" + o.getCountry(), Collectors.counting()));
List<Record> countRecords = countMap.keySet().stream().map(key -> {
String[] temp = key.split("_");
String productType = temp[0];
String country = temp[1];
Record record = new Record();
record.set("device_type", productType);
record.set("location", country;
record.set("count", countMap.get(key).intValue());
return record;
}).collect(Collectors.toList());
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea運(yùn)行main方法或Test避免編譯整個應(yīng)用的實現(xiàn)方法
這篇文章主要介紹了idea運(yùn)行main方法或Test避免編譯整個應(yīng)用的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
Java中redisTemplate注入失敗NullPointerException異常問題解決
這篇文章主要介紹了Java中redisTemplate注入失敗NullPointerException異常問題解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2023-08-08

