如何按日期分割对象列表?

时间:2019-01-15 20:15:59

标签: java collections

我的课:

public class Proposal{
  Date createDate;
  // ...
}

我们有两个对象java.util.Date,并且确定知道此集合的对象在这两个日期之间。如何在这些日期之间按天划分这些对象,以便我可以按日期获得这些对象的列表?

3 个答案:

答案 0 :(得分:2)

像这样吗?

public Map<String, Set<Proposal>> groupProposals(Iterable<Proposal> proposals) {
    Map<String, Set<Proposal>> map = new HashMap<>();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    for (Proposal p : proposals) {
        String key = sdf.format(p.getCreateDate());
        if (!map.containsKey(key)) {
            map.put(key, new HashSet<>());
        }
        map.get(key).add(p);
    }
    return map;
}

答案 1 :(得分:0)

类似这样的方法以获得列表之一。 List<Object> inDateList = list.stream().filter(o-> startDate< o.createDate && o.createDate< endDate).collect(Collectors.toList());

然后List<Object> outDateList = new ArrayList<>(list); outDateList.removeAll(inDateList);

编辑 只是为了澄清我上面的注释。

public Map<String, Set<Proposal>> groupProposals(Iterable<Proposal> proposals) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return proposals.stream()
//GroupingBy creates the Map<Key, Collection<Something>>
.collect(Collectors.groupingBy(p->sdf.format(p.getCreateDate()),//Creates the Key and buckets
        Collectors.mapping(i-> i, Collectors.toSet()))); //what kind of buckets do you want. 
}

答案 2 :(得分:0)

从Java 8开始,这可以通过Collectors.groupingBy无缝完成:

yum update