我有一个订单对象
public class Order{
private Date orderDate;
//other fields + getters & setters
}以及订单列表(List< Orders>)。现在,我想根据类似的orderDate (这里类似的意思是,相同的年份、月份和日数)将此订单列表分组,并生成如下地图:
Map<Date, List<Order>> orderMap = new HashMap<>();如何在Java 8+中做到这一点?
请注意,我们可能有相似的日期,但时间戳不同,这意味着我们希望以“年、月、日”为基础。
发布于 2019-05-25 13:10:15
我并不真的支持用streams做任何事情,但是你可以用一种很难的转换方式来完成它。
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);
}));这是在你需要使用日期的情况下。否则我支持michalk的答案
https://stackoverflow.com/questions/56304807
复制相似问题