0

我有 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 Ifdate1 = nulldate2 > date3number2 = 0number3 = 1。然后我想将值设置为number3

有人可以建议我一种方法来处理我正在寻找的东西吗?

4

1 回答 1

2

你如何处理null完全取决于你。

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

此实现会丢弃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而不是您的自定义代码,它对您的代码的其他读者来说更清楚。为什么要重新发明轮子?

于 2013-03-25T22:37:50.053 回答