Как сгруппировать список объектов по дате? - PullRequest
0 голосов
/ 15 января 2019

Мой класс:

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

У нас есть два объекта java.util.Date, и мы точно знаем, что объекты этой коллекции находятся между этими двумя датами. Как разделить эти объекты по дням между этими датами, чтобы я мог получить список этих объектов по дате?

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Как то так?

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;
}
0 голосов
/ 15 июля 2019

Начиная с Java 8 это может быть выполнено без проблем с помощью Collectors.groupingBy:

Map<Date, List<Proposal>> groupedByDate = proposals.stream()
    .collect(Collectors.groupingBy(Proposal::getDate));
0 голосов
/ 15 января 2019

Как-то так, чтобы получить один из списков. 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);

EDIT Просто чтобы уточнить мою заметку выше.

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. 
}
...