1. 程式人生 > >【開發者筆記】按List中存放對象的某一字段計數的問題

【開發者筆記】按List中存放對象的某一字段計數的問題

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中存放對象的某一字段計數的問題