2016-02-25 3 views
2

У меня есть мультикап java, который содержит идентификатор, сопоставленный с датой начала и датой окончания.Итерация по списку и возврату соответствующих ключей

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()', вы получите только данные точно так же, как datetime 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- Ява – 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; 
    } 
Смежные вопросы