【開發者筆記】按List中存放對象的某一字段計數的問題
阿新 • • 發佈:2017-12-20
true value right 過大 java block package 技術 display
如題,假設有如下表t_info:
name | date | info |
a | 20127-12-20 | xxxx描述 |
b | 20127-12-20 | yyyyy描述 |
c | 20127-12-21 | zzz描述 |
d | 20127-12-22 | mmmm描述 |
如果我們要計算上表中每一天的info個數,name在數據庫中我們可以簡單解決:
select date --日期 ,count(*) as num --數量 from t_info group by date
但是如果我們將上述數據轉成了Info對象,那麽在程序中應該怎麽計算呢?於是就來記錄一下~
實現思路:
1、新建一個Map<String,Integer>對象用來存放計算結果,鍵表示日期,值表示該日期下的對象個數。
2、遍歷List中的Info對象,提取對象中的Date字段,判斷Map是否存在key為該Date的對象,若不存在,則添加鍵值對(Date,0),對Map中key為Date的值加1。
3、計算結束,遍歷Map打印結果。
下面是代碼:
package com.dyi.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class SortTest { public static void main(String[] args) { //構造List List<Info> list = new ArrayList<Info>(); initList(list); //構造結果Map,並遍歷List得出結果 Map<String,Integer> groupList = new HashMap<String,Integer>(); for(Info info:list){ String key = info.date; if(!groupList.containsKey(key)){ groupList.put(key, 0); } groupList.put(key, groupList.get(key)+1); } //打印結果 for(String key:groupList.keySet()){ System.out.println("key:"+key+",value:"+groupList.get(key)); } } public static void initList(List<Info> list){ list.add(new Info("2017-12-20")); list.add(new Info("2017-12-20")); list.add(new Info("2017-12-21")); list.add(new Info("2017-12-21")); list.add(new Info("2017-12-21")); list.add(new Info("2017-12-22")); list.add(new Info("2017-12-22")); list.add(new Info("2017-12-22")); list.add(new Info("2017-12-22")); list.add(new Info("2017-12-22")); list.add(new Info("2017-12-23")); list.add(new Info("2017-12-23")); list.add(new Info("2017-12-23")); list.add(new Info("2017-12-24")); list.add(new Info("2017-12-25")); } } class Info{ public String date; public String name; public String info; public Info(String date){ this.date = date; } }
下面是打印結果,結果吻合……
這些或簡單或復雜的小功能,都可以通過基本類庫來完成的,畢竟java的工具類那麽多。只是完成時間和性能的差別而已,沒看過大牛的寫法,自己記錄一下吧。
【開發者筆記】按List中存放對象的某一字段計數的問題