zoukankan      html  css  js  c++  java
  • 【开发者笔记】按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描述

      如果我们要计算上表中每一天的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的工具类那么多。只是完成时间和性能的差别而已,没看过大牛的写法,自己记录一下吧。

  • 相关阅读:
    MYSQL/HIVESQL笔试题(一):HIVESQL(一)分组求TopN/行转列/列转行
    ALINK(七):ALINK使用技巧(二)
    Hive实战(6):完整案例(二)业务分析
    Hive实战(5):完整案例(一)准备
    Mysql基础(二十四):数据类型/常见约束
    Mysql基础(二十三):视图/存储过程
    数据可视化基础专题(三十四):Pandas基础(十四) 分组(二)Aggregation/apply
    Daily Coding Problem: Problem #677
    1027. Longest Arithmetic Subsequence (Solution 1)
    346. Moving Average from Data Stream
  • 原文地址:https://www.cnblogs.com/wyongbo/p/8072644.html
Copyright © 2011-2022 走看看