Java 在嵌套对象上使用lambda和streams
我想在一个复杂的嵌套对象上使用lambda和streams,并想比较日期。有人能帮我吗?我如何使用lambda表达式 从下面的对象中,我想筛选出所有权开始日期<员工加入日期的所有资产项ID,并想将所有这些ID放入数组列表中 到目前为止,我的代码提供了所有资产项目ID,我不知道如何使用筛选器将item.ownership.startDate与emp.joiningDate进行比较Java 在嵌套对象上使用lambda和streams,java,lambda,java-8,mapping,java-stream,Java,Lambda,Java 8,Mapping,Java Stream,我想在一个复杂的嵌套对象上使用lambda和streams,并想比较日期。有人能帮我吗?我如何使用lambda表达式 从下面的对象中,我想筛选出所有权开始日期emp.getAssets().stream())。 flatMap(资产->资产.getAssetItem().stream())。 映射(item->item.getId()).collect(Collectors.toList()); 期望列表中只有资产项id 2。一种混合方法,使用循环迭代收集员工并对每个员工的资产进行流式处理,然
{
"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());
List assetList=object.getEmployees().stream()。
flatMap(emp->emp.getAssets().stream())。
flatMap(资产->资产.getAssetItem().stream())。
映射(item->item.getId()).collect(Collectors.toList());
期望列表中只有资产项id 2。一种混合方法,使用
循环迭代收集员工并对每个员工的资产进行流式处理,然后分别基于条件和项目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()));
}
非常感谢@Naman,让我试试这个。我会带着结果回来的!
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());