Java 在嵌套对象上使用lambda和streams

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。一种混合方法,使用循环迭代收集员工并对每个员工的资产进行流式处理,然

我想在一个复杂的嵌套对象上使用lambda和streams,并想比较日期。有人能帮我吗?我如何使用lambda表达式

从下面的对象中,我想筛选出所有权开始日期<员工加入日期的所有资产项ID,并想将所有这些ID放入数组列表中

到目前为止,我的代码提供了所有资产项目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());
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());