【开发者笔记】按List中存放对象的某一字段计数的问题

简介:   如题,假设有如下表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描述   ...

  如题,假设有如下表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的工具类那么多。只是完成时间和性能的差别而已,没看过大牛的写法,自己记录一下吧。

 

黑夜给了我黑色的眼睛,我却用它寻找光明
目录
相关文章
|
7月前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
279 0
|
7月前
|
数据处理
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
63 0
|
2月前
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
269 7
|
4月前
|
TensorFlow 算法框架/工具 Python
从numpy,list对象创建
【8月更文挑战第12天】从numpy,list对象创建。
28 8
|
4月前
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
44 5
|
4月前
|
BI
【Azure Power BI】Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
【Azure Power BI】Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
|
6月前
|
Java
Java list中的对象转为list,list中的对象转为map
Java list中的对象转为list,list中的对象转为map
122 1
|
6月前
|
BI
Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
在Power BI中,从SharePoint List获取数据时遇到Table和List混合的数据源,直接展开会导致“笛卡尔积”效应,生成过多行。目标是保持行数不变,将Table中的字段与List值用逗号分隔显示在同一行。解决方法包括:1) 添加新列,从Table中提取List的Column2值;2) 使用Text.Combine函数合并List中的值。具体操作步骤包括选择列并自定义新列,然后展开List并以逗号分隔。通过这些步骤,可以将Table转换为所需的字符串格式。完整的Power BI Query代码展示了这一过程。参考链接提供了更多详情。
100 2
|
7月前
|
存储 C++ 容器
黑马c++ STL部分 笔记(7) list容器
黑马c++ STL部分 笔记(7) list容器
|
7月前
list如何将自己实体的字段值赋给另外一个List实体中的相同字段
list如何将自己实体的字段值赋给另外一个List实体中的相同字段
211 0