2 qq 21194023 qq_21194023 于 2016.01.15 08:47 提问

Java 从多个日期中找出最大最小时间 50C

1 a 2013-04-01
1 a 2013-04-08
1 a 2013-04-28
2 a 2013-04-08
2 a 2013-11-11
求代码,实现以前两列为唯一,比较多个日期从中找出最早最晚时间,并统计出现次数
1 a 2013-04-01 2013-04-28 3
2 a 2013-04-08 2013-11-11 2

11个回答

u012505618
u012505618   2016.01.15 09:42

lz我不知道你的前两列唯一是什么意思
实现的是对日期的排序统计
具体的lz你在你的需求你基础上改吧

 import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/**
 * Created by Administrator on 2016/1/15.
 */
public class DataComp {
    public static void main(String []arg0){
        String []dateArray = {"2013-04-01","2013-04-08","2013-04-28",
            "2013-04-08", "2013-11-11"};
        showResult(dateArray);
    }

    private static void showResult(String[] dateArray) {
        Map<String, Integer> dateMap = new TreeMap<String, Integer>();
        int i, arrayLen;
        arrayLen = dateArray.length;
        for(i = 0; i < arrayLen; i++){
            String dateKey = dateArray[i];
            if(dateMap.containsKey(dateKey)){
                int value = dateMap.get(dateKey) + 1;
                dateMap.put(dateKey, value);
            }else{
                dateMap.put(dateKey, 1);
            }
        }
        Set<String> keySet = dateMap.keySet();
        String []sorttedArray = new String[keySet.size()];
        Iterator<String> iter = keySet.iterator();
        int index = 0;
        while (iter.hasNext()) {
            String key = iter.next();
        //    System.out.println(key + ":" + dateMap.get(key));
            sorttedArray[index++] = key;
        }
        int sorttedArrayLen = sorttedArray.length;
        System.out.println("最小日期是:" + sorttedArray[0] + "," +
                " 天数为" + dateMap.get(sorttedArray[0]));
        System.out.println("最大日期是:" + sorttedArray[sorttedArrayLen - 1] + "," +
                " 天数为" + dateMap.get(sorttedArray[sorttedArrayLen - 1]));
    }
qq_21194023
qq_21194023 说面上面是原始数据:1 a 2013-04-01 1 a 2013-04-08 1 a 2013-04-28 2 a 2013-04-08 2 a 2013-11-11;说面下面是结果数据:1 a 2013-04-01 2013-04-28 3 2 a 2013-04-08 2013-11-11 2
2 年多之前 回复
qq_21194023
qq_21194023 您好 ,理解错误啦,我是想统计1 a 后面的时间 最早出现时间,最晚出现时间,1 a 出现的次数 ‘1 a’是一个整体
2 年多之前 回复
enpterexpress
enpterexpress   Rxr 2016.01.15 09:38

源数据如下

源数据

搜索语句及结果如下

搜索数据

可以查看我的博客SqlServer 根据字段分类汇总信息

yuanwang886
yuanwang886   2016.01.16 11:03
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {

    List<Bean> beanList = new ArrayList<Bean>();

    Map<String, Result> map = new HashMap<String, Result>();

    public void setBean(Bean bean) {
        this.beanList.add(bean);
    }

    public void compare() {
        for (Bean bean : beanList) {

            if (map.containsKey(bean.id + bean.letter)) {
                Result result = map.get(bean.id + bean.letter);
                result.compare(bean);
            } else {
                Result result = new Result(bean);
                map.put(bean.id + bean.letter, result);
            }
        }
    }

    public void printResult() {
        for (Map.Entry<String, Result> entry : map.entrySet()) {
            entry.getValue().printResult();
        }
    }

    public static void main(String[] args) {

        Bean a = new Bean("1", "a", "2013-04-01");
        Bean b = new Bean("1", "a", "2013-04-08");
        Bean c = new Bean("1", "a", "2013-04-28");
        Bean d = new Bean("2", "a", "2013-04-08");
        Bean e = new Bean("2", "a", "2013-11-11");
        Bean f = new Bean("1", "a", "2013-11-11");

        Test test = new Test();
        test.setBean(a);
        test.setBean(b);
        test.setBean(c);
        test.setBean(d);
        test.setBean(e);
        test.setBean(f);

        test.compare();
        test.printResult();
    }
}

class Bean {
    String id;
    String letter;
    String date;

    public Bean(String a, String b, String c) {
        this.id = a;
        this.letter = b;
        this.date = c;
    }
}

class Result {
    String id;
    String letter;
    String min;
    String max;
    int num;

    public Result(Bean bean) {
        this.id = bean.id;
        this.letter = bean.letter;
        this.min = bean.date;
        this.max = bean.date;
        this.num = 1;
    }

    public void compare(Bean bean) {
        if (this.min.compareTo(bean.date) > 0) {
            this.min = bean.date;
        } else {
            this.max = bean.date;
        }
        this.num++;
    }

    public void printResult() {
        System.out.println(this.id + this.letter + "   " + this.min + "   "
                + this.max + "   " + this.num);
    }
}
yuanwang886
yuanwang886   2016.01.16 11:04

卧槽,终于好看了~~~~强迫症~

91program
91program   Ds   Rxr 2016.01.15 08:58

如果字符串的格式如上是固定的,可直接使用字符串大小比较来确定最大最小时间,不用传成时间或者数字。

dcxy0
dcxy0   Ds   Rxr 2016.01.15 09:00
weixin_32769751
weixin_32769751   2016.01.15 09:06

so easy....

wenwen091100304
wenwen091100304   2016.01.15 13:56

package stringTest;

public class DateCompare {

static int minCount =1;
static int maxConut =1;
static String mindate ="";
static String maxdate="";

public static void main(String args[]){
    String dates[] =new String[]{"2013-04-01","2013-04-08","2014-03-28","2013-04-08"};
    mindate=dates[0];
    maxdate=dates[0];

    for(int i=0;i<dates.length;i++){
        if(compare(dates[i], mindate)==-1){
            mindate=dates[i];
            minCount=1;
        }else if(compare(dates[i], mindate)==0){
            minCount+=1;
        }
        if(compare(dates[i], maxdate)==1){
            maxdate=dates[i];
            maxConut=1;
        }else if(compare(dates[i], maxdate)==0){
            maxConut+=1;
        }
    }
    System.out.println("最小日期:"+mindate +"出现次数"+minCount);
    System.out.println("最大日期:"+maxdate+"出现次数"+maxConut);

}
public static int compare(String date1,String date2){

    MDate d1 ,d2;
    d1 = str2date(date1);
    d2 =str2date(date2);
    return d1.compareDate(d2);

}
public static MDate str2date(String date){
    MDate d = new MDate();
    d.year = Integer.parseInt(date.substring(0, 4));
    d.month = Integer.parseInt(date.substring(5, 7));
    d.day = Integer.parseInt(date.substring(8, 10));
    return d;

}

static class MDate{
    int year;

    int month;

    int day;

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "year:"+year+"month:"+month+"day:"+day;
    }

    public int compareDate(MDate date){
        if(this.year-date.year>0){
            return 1;
        }else if(this.year-date.year<0){
            return -1;
        }else{
            if(this.month-date.month>0){
                return 1;
            }else if(this.month-date.month<0){
                return -1;
            }else{
                if(this.day-date.day>0){
                    return 1;
                }else if(this.day-date.day<0){
                    return -1;
                }
                else{
                    return 0;
                }

            }
        }

    }

}

}

运行结果:
最小日期:2013-04-01出现次数2
最大日期:2014-03-28出现次数1

qq_21194023
qq_21194023 说面上面是原始数据:1 a 2013-04-01 1 a 2013-04-08 1 a 2013-04-28 2 a 2013-04-08 2 a 2013-11-11;说面下面是结果数据:1 a 2013-04-01 2013-04-28 3 2 a 2013-04-08 2013-11-11 2
2 年多之前 回复
qq_21194023
qq_21194023 您好 ,理解错误啦,我是想统计1 a 后面的时间 最早出现时间,最晚出现时间,1 a 出现的次数 ‘1 a’是一个整体
2 年多之前 回复
qq_21194023
qq_21194023 您好 ,理解错误啦,我是想统计1 a 后面的时间 最早出现时间,最晚出现时间,1 a 出现的次数 ‘1 a’是一个整体
2 年多之前 回复
yuanwang886
yuanwang886   2016.01.16 10:23

图片说明

如果是数据库(这里是mysql,表名是统计)
select a.id, MAX(a.date), MIN(a.date), COUNT(1)
from tongji a
group by a.id;

yuanwang886
yuanwang886   2016.01.16 10:59

如果是java代码的话,也写了
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {

List<Bean> beanList = new ArrayList<Bean>();

Map<String, Result> map = new HashMap<String, Result>();

public void setBean(Bean bean) {
    this.beanList.add(bean);
}

public void compare() {
    for (Bean bean : beanList) {

        if (map.containsKey(bean.id + bean.letter)) {
            Result result = map.get(bean.id + bean.letter);
            result.compare(bean);
        } else {
            Result result = new Result(bean);
            map.put(bean.id + bean.letter, result);
        }
    }
}

public void printResult() {
    for (Map.Entry<String, Result> entry : map.entrySet()) {
        entry.getValue().printResult();
    }
}

public static void main(String[] args) {

    Bean a = new Bean("1", "a", "2013-04-01");
    Bean b = new Bean("1", "a", "2013-04-08");
    Bean c = new Bean("1", "a", "2013-04-28");
    Bean d = new Bean("2", "a", "2013-04-08");
    Bean e = new Bean("2", "a", "2013-11-11");
    Bean f = new Bean("1", "a", "2013-11-11");

    Test test = new Test();
    test.setBean(a);
    test.setBean(b);
    test.setBean(c);
    test.setBean(d);
    test.setBean(e);
    test.setBean(f);

    test.compare();
    test.printResult();
}

}

class Bean {
String id;
String letter;
String date;

public Bean(String a, String b, String c) {
    this.id = a;
    this.letter = b;
    this.date = c;
}

}

class Result {
String id;
String letter;
String min;
String max;
int num;

public Result(Bean bean) {
    this.id = bean.id;
    this.letter = bean.letter;
    this.min = bean.date;
    this.max = bean.date;
    this.num = 1;
}

public void compare(Bean bean) {
    if (this.min.compareTo(bean.date) > 0) {
        this.min = bean.date;
    } else {
        this.max = bean.date;
    }
    this.num++;
}

public void printResult() {
    System.out.println(this.id + this.letter + "   " + this.min + "   "
            + this.max + "   " + this.num);
}

}

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAVA期中练习题
5-1 找素数(10分) 请编写程序,从键盘输入两个整数m,n,找出等于或大于m的前n个素数。输入格式:第一个整数为m,第二个整数为n;中间使用空格隔开。例如:103 3输出格式:从小到大输出找到的等于或大于m的n个素数,每个一行。例如:103107109输入样例: 9223372036854775839 2 输出样例: 9223372036854775907 92233720368
选择一段日期内的每一天
最近在完成一个小项目时,碰到要取一个月部份日期的问题,经过一番努力后终于完成了。由于学习才刚刚学习java,不足之处还请指正。 实现的功能有:1. 根据输入的日期,返回当前月份的每一天。 2.根据输入的日期,返回昨天的日期。 3.返回当前日期的月份天数
Date的工具方法——最大最小时间
查询某一段时间时,数据库一般是从当前时间开始,可这样会导致之前的记录(或者非正常工作时间)查不到,这时候就需要用到最大最小时间。比如查询某一天的信息记录,那么就需要将开始时间定为某天的00:00:00,将结束时间定位某天的23:59:59,这样才不会漏掉非正常时间下的记录信息: 转换思路: 1,将日期Date转换为yyyy-MM-dd格式的String 2,将yyyy-MM-dd格式的Str
100000个数找出最小或最大的10个
大体思路: 首先一点,对于海量数据处理,思路基本上是确定的,必须分块处理,然后再合并起来。 对于每一块必须找出10个最大的数,因为第一块中10个最大数中的最小的,可能比第二块中10最大数中的最大的还要大。 分块处理,再合并。也就是Google MapReduce 的基本思想。Google有很多的服务器,每个服务器又有很多的CPU,因此,100亿个数分成100块,每个服务器处理一块,1亿个数分成...
从一亿个数中找出最大的一万个数或最小的一万个数
1 从一亿个数中找出最大的一万个数:(前10000个元素构建最小堆,后续元素与根节点比较,大于放进去,小于或等于不处理) 用前一万个数初始化一个固定大小为10000的最小堆,这时根节点是这10000个数里最小的一个。 把后续的数依次与最小堆的根节点比较,如果大于则放进最小堆(这个操作同时会弹出一个元素并改变根节点),小于等于不做处理。 这个算法的复杂度几乎接近于O(n) 2 从一亿
(原) mysql 查询表中最大时间和非空值的合集
有表 查询 time 最大  con 非空的时间   注:time  为整个表  最大 现有数据 要求结果   时间最大  并且有内容 sql语句select a.id ,a.con, max(b.time) from test a, test b where a.con '' ); 还有没有更好的方法啊。。。。。。
日期处理含有T,Z等特殊的日期处理
public class DateUtil { /**      * All Dates are normalized to UTC, it is up the client code to convert to the appropriate TimeZone.      */     public static final TimeZone UTC;     /**    
JavaScript去除日期中的“-”
JavaScript去除日期中的“-” 1、说明       经常会出现这样的情况,页面的日期格式是:YYYY-MM-DD,而数据库中的日期格式是:YYYYMMDD,两者之间需要转换一下,方能传到Java后台查询数据。       通常,这种转化的方法有两种,第一种,将日期字符串先截取,然后拼接;第二种,就是利用正则表达式去掉“-”       相比较而言,第二种方法快捷,不容易出
找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没鞍点),打印出有关信息
/*line 4 list 3 经本人试验,取随意行列数,这个式子都能运行成功,不过不好赋值,但可以换 成赋值随机数,但是那样就比较难出现鞍点,我随即了60次,只出现了2次*/ //int _array[line][list] = {10,8,10,11,13,7,12,15,5,15,17,18};// 举例子,10是鞍点 int _array[line][l
java编程寻找目录 C:/Windows 下的最大文件、最小文件
public static void listFiles(File file ){ if(file.isFile()){ if(file.length()>maxSize){ maxSize = file.length(); maxFile = file; } if(file.length()<minSize && file.length()>0){ minSize = file.length(); minFile = file; } }