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:持っている3つの最新の日付を確認し、その日付に対応する番号を選択する必要があります。

ステップ2:その日付に対応する数値が0の場合、3つの日付の中で次に高い値が必要です

注:日付はnull

すべての日付がnullでない場合、私のコードは機能します。日付の1つが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;
     }
  }
}

アップデート

日付の1つがnull Ifdate1 = nullおよび。である場合の例date2 > date3number2 = 0およびnumber3 = 1。次に、値を次のように設定しますnumber3

誰かが私が探しているものを処理する方法を私に提案できますか?

4

1 に答える 1

2

どのように扱うかnullは、あなた次第です。

この例では、を使用しTreeMapてキーと値のペアを並べ替えてから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 に答える