通过按组分组并在结果上应用min函数,可以从列表中的每个类别中获取具有最小可用日期的对象。

但是我需要从具有相同可用日期的不同组获取资源。它不必是最小的。

如何使用Java流来做到这一点?

即使我可以得到有用的sql查询,也可以尝试使用Java流构建它。

List<ResourceInformation> list = new ArrayList<ResourceInformation>();
Class ResourceInforation {
      private ResourceGroup resourceGroup;

      private Resource resource;

      private Date availableDate;

      // getters and setters
}


输入:

|resource_group_id|resource_id|availability_date|
|-----------------|-----------|-----------------|
|      1          |     1     |    10/03/16     |
|      1          |     2     |    10/04/16     |
|      1          |     3     |    10/05/16     |
|      1          |     4     |    10/04/16     |
|-----------------|-----------|-----------------|


输出将是每个资源组中具有相同可用日期的ResourceInformation的列表

|resource_group_id|resource_id|availability_date|
|-----------------|-----------|-----------------|
|      1          |     2     |    10/04/16     |
|      2          |     4     |    10/04/16     |
|-----------------|-----------|-----------------|

最佳答案

Map<Date, List<ResourceInformation>> resourcesByDate = list.stream()
                     .collect(Collectors.groupingBy(ResourceInformation::getAvailableDate));


产生一个Map,其中包含每个日期的条目作为关键字,并且相应的ResourceInformation是值列表。

10-01 03:25