Mehdi:
Eu tenho um objeto Order
public class Order{
private Date orderDate;
//other fields + getters & setters
}
E uma lista de pedidos ( List <Encomendas> ). Agora eu quero grupo esta lista de pedidos com base em orderDate similares (similar em aqui significa, mesmo ano, mês e dia) e produzir um mapa como este:
Map<Date, List<Order>> orderMap = new HashMap<>();
Como fazer isso em Java 8+?
Tome nota que pode ter data semelhante, mas timestamp diferente que significa que nós queremos baseou em "ano, mês, dia"
Scorix:
Eu realmente não apoiar o ponto de fazer tudo com correntes, mas você pode fazê-lo com uma maneira convertion duro.
List<Order> orders = ... your list ...
Map<Date, List<Order>> orderMap = orders.stream().collect(Collectors.groupingBy(order->{
//Converting from Date to Instant
Instant dateInstant = order.getOrderDate().toInstant();
//Converting Instant to LocalDateTime and setting it to the start of the day
LocalDateTime dateTime = dateInstant.atZone(ZoneId.systemDefault()).toLocalDate().atStartOfDay();
//Converting it back to an instant
Instant startOfDayInstant = dateTime.atZone(ZoneId.systemDefault()).toInstant();
//Returning the util date
return Date.from(startOfDayInstant);
}));
Esta é sob a circunstância que você precisa util data. Caso contrário, eu apoio à resposta da Michalk