迭代列表并返回匹配的键

时间:2016-02-25 15:44:31

标签: java

我有一个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);
    }
}

这不会给我预期的结果吗? 这可以更容易/不同吗?提前谢谢。

2 个答案:

答案 0 :(得分: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 :(得分: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;
   }