2016-02-25 120 views
2

我有一個java multimap包含映射到開始日期和結束日期的標識符。遍歷列表並返回匹配鍵

SetMultiMap<String,List<Date>> mymap = LinkedHashMultimap.create(); 

我使用這個地圖中的另一種方法,在這裏我想檢索其結束日期不到1個星期前所有的按鍵。

我嘗試這樣做:

DateTime lastWeek_joda = new DateTime().minusDays(7); 
Date end_date = lastWeek_joda.toDate(); 

現在我重複如下:

for (Map.Entry<String,List<date>> entry : mymap.entries()) 
    String key = entry.getKey(); 
    List<Date> value = entry.getValue(); 
    if (end_date.equals(value.get(1))) { 
     key_set.add(key); 
    } 
} 

這並不返回我預期的結果? 這可以做到任何更容易/不同?提前致謝。

+0

你應該使用'的compareTo()'。通過使用'equals()',您將只能得到與1周前的日期時間完全相同的日期時間。 –

+1

試試看[如何比較日期](http://stackoverflow.com/a/2592513/1346996)。 – aribeiro

+0

在Java中使用日曆類來檢查日期range.it提供了很多功能來過濾date.http://stackoverflow.com/questions/17210839/get-last-week-date-range-for-a-date-in- java的 – gihan

回答

2

您正在檢查與周最新日期完全相同的日期。 取而代之,使用compareTo並檢查周前日期是否大於(晚於)當前值。

for (Map.Entry<String,List<date>> entry : mymap.entries()) 
    String key = entry.getKey(); 
    List<Date> value = entry.getValue(); 
    if (end_date.compareTo(value.get(1)) > 0) { 
     key_set.add(key); 
    } 
} 
1
for (Map.Entry<String,List<date>> entry : mymap.entries()) 
    String key = entry.getKey(); 
    List<Date> value = entry.getValue(); 
    if (checkDateRange(value.get(1))) { 
     key_set.add(key); 
    } 
} 

public boolean checkDateRange(Date tDate) { 
    Date date = new Date(); 
    Calendar c = Calendar.getInstance(); 
    c.setTime(date); 
    int i = c.get(Calendar.DAY_OF_WEEK) - c.getFirstDayOfWeek(); 
    c.add(Calendar.DATE, -i - 7); 
    Date start = c.getTime(); 
    c.add(Calendar.DATE, 6); 
    Date end = c.getTime(); 

    //your logic goes here 
    if(start<=tDate<=end){ 
     return true; 
    } 
    return false; 
    }