返回一个考虑日期和数字的值

时间:2013-03-25 22:19:05

标签: java performance

我有3个日期和3个数字

Date date1 = "2013-01-23";
Date date2 = "2013-03-24";
Date date3 = "2012-12-20";

number1 = 10;
number2 = 0;
number3 = 3;

步骤1:我必须检查我所拥有的三个日期的最新日期,并选择与该日期对应的数字。

步骤2:如果与该日期对应的数字为0,我需要三个日期中的下一个最高值

注意:日期可以是null

如果所有日期都不为空,则我的代码有效。当其中一个日期是null

时,我很难处理这种情况
if(date1 != null && date3 != null) {
   if(date1.compareTo(date3) > 0 && number1 > 0) {
     dateCompare = date1;
     object.set(number1);
   } else if(date3.compareTo(date1) > 0 && number3 > 0) {
       dateCompare = date3;
       object.set(number3);
   }
}

if(date2 != null) {
  if(dateCompare != null) {
     if(date2.compareTo(dateCompare) > 0 && number2 > 0 ) {
        object.set(number2);
        dateCompare = date2;
     }
  }
}

更新

其中一个日期为null的示例 如果date1 = nulldate2 > date3number2 = 0number3 = 1。然后我想将值设置为number3

有人可以建议我处理我要找的东西吗?

1 个答案:

答案 0 :(得分:2)

你如何处理null取决于你。

此示例使用TreeMapDate对键/值对进行排序,然后按降序循环,直到找到非零值。

此实现会删除null值,因为它们无法进行有意义的排序。从OP的例子来看,这似乎是处理null的正确方法。唯一剩下的问题是如果一切都是null该怎么办。

private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

public static void main(String[] args) {
    final TreeMap<Date, Integer> map = new TreeMap<Date, Integer>() {
        @Override
        public Integer put(Date key, Integer value) {
            if (key != null) {
                return super.put(key, value);                  
            }
            return null;
        }
    };
    map.put(parseDate("2013-01-23"), 10);
    map.put(parseDate("2013-03-24"), 0);
    map.put(parseDate("2012-12-20"), 3);
    for (final Entry<Date, Integer> entry : map.descendingMap().entrySet()) {
        if (entry.getValue() > 0) {
            System.out.println(entry + " has nonzero value");
            break;
        }
        System.out.println(entry + " has zero value. Continue looking.");
    }
}

public static Date parseDate(final String date) {
    if (date == null) {
        return null;
    }
    try {
        return dateFormat.parse(date);
    } catch (ParseException ex) {
        ex.printStackTrace(System.out);
        return null;
    }
}

输出:

Sun Mar 24 00:00:00 GMT 2013=0 has zero value. Continue looking.
Wed Jan 23 00:00:00 GMT 2013=10 has nonzero value

我当然建议使用TreeMap而不是您的自定义代码,这对您的代码的其他读者来说更清晰。为什么重新发明轮子?