gpt4 book ai didi

java - 在嵌套对象上使用 lambda 和流

转载 作者:行者123 更新时间:2023-11-30 10:01:45 29 4
gpt4 key购买 nike

我想在复杂的嵌套对象上使用 lambda 和流,并想比较日期。有人可以帮助我如何使用 lambda 表达式来做到这一点

我想从下面的对象中过滤掉所有权开始日期 < 员工加入日期的所有 Assets 项目 ID,并希望将所有这些 ID 放入数组列表

我目前的代码给了我所有的 Assets 项目 ID,我不知道如何使用过滤器来比较 item.ownership.startDate 和 emp.joiningDate

{
"transactionDate": "",
"employees": [
{
"joiningDate": "2018-06-12T07:13:48.504Z",
"assets": [
{
"assetItem": [
{
"id": "1",
"ownership": {
"startDate": "2017-06-12T07:13:48.506Z",
"endDate": "2017-06-12T07:13:48.506Z"
}
}
]
},
{
"assetItem": [
{
"id": "2",
"ownership": {
"startDate": "2018-06-12T07:13:48.506Z",
"endDate": "2018-06-12T07:13:48.506Z"
}
}
]
},
{
"assetItem": [
{
"id": "3",
"ownership": {
"startDate": "2017-06-12T07:13:48.506Z",
"endDate": "2017-06-12T07:13:48.506Z"
}
}
]
}
]
}
]
}

下面是我要修改的代码

  List<String> assetList = object.getEmployees().stream().
flatMap(emp -> emp.getAssets().stream()).
flatMap(asset -> asset.getAssetItem().stream()).
map(item -> item.getId()).collect(Collectors.toList());

期望列表中只有 Assets 项目 id 2。

最佳答案

一种混合方法,使用 for 循环迭代 Employee 的集合并流式传输每个员工的 Assets ,然后进行 filtermap根据条件和项目 id 分别进行 ping。

List<String> assetItemIds = new ArrayList<>();
for (Employee employee : employees) {
assetItemIds.addAll(employee.getAssets().stream()
.flatMap(asset -> asset.getAssetItem().stream())
.filter(assetItem -> assetItem.getOwnerShip().getStartDate() >= employee.getJoiningDate())
.map(AssetItem::getId)
.collect(Collectors.toList()));
}

尽管将其转换为单个流操作的结构有点复杂,但创建 EmployeeAssetItem 流的条目是技巧,然后相应地映射值。这可以通过以下方式实现:

List<String> assetItemIds = employees.stream()
.map(emp -> new AbstractMap.SimpleEntry<>(emp,
emp.getAssets().stream()
.flatMap(asset -> asset.getAssetItem().stream())
.filter(assetItem -> assetItem.getOwnerShip().getStartDate() >= emp.getJoiningDate())))
.flatMap(e -> e.getValue().map(AssetItem::getId))
.collect(Collectors.toList());

关于java - 在嵌套对象上使用 lambda 和流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57292230/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com