通过按组分组并在结果上应用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
是值列表。