首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分类列表的最佳方法

分类列表的最佳方法
EN

Stack Overflow用户
提问于 2019-05-25 12:27:48
回答 5查看 240关注 0票数 1

我有一个订单对象

代码语言:javascript
复制
public class Order{
  private Date orderDate;
  //other fields + getters & setters
}

以及订单列表(List< Orders>)。现在,我想根据类似的orderDate (这里类似的意思是,相同的年份、月份和日数)将此订单列表分组,并生成如下地图:

代码语言:javascript
复制
Map<Date, List<Order>> orderMap = new HashMap<>();

如何在Java 8+中做到这一点?

请注意,我们可能有相似的日期,但时间戳不同,这意味着我们希望以“年、月、日”为基础。

EN

Stack Overflow用户

发布于 2019-05-25 13:10:15

我并不真的支持用streams做任何事情,但是你可以用一种很难的转换方式来完成它。

代码语言:javascript
复制
 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的答案

票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56304807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档