2016-02-25 117 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; 
    }