首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Java流从嵌套列表和外部列表收集数据

使用Java流从嵌套列表和外部列表收集数据
EN

Stack Overflow用户
提问于 2022-05-23 17:15:35
回答 4查看 191关注 0票数 3
代码语言:javascript
复制
Class Package{
  Long packageId;
  String packageName;
  List<Service> serviceList;
}

Class Service{
  Long serviceId;
  String location;
}

List <Package> packageList

上面是我的类,要求从外部列表收集packageIdpackageListserviceId从内部列表(每个PackageServices )收集packageList.packageName == "Full"serviceList.location == "Japan"。另外,我需要知道这种记录是否存在。这就是我到目前为止所写的将数据收集到HashMap中的内容。

代码语言:javascript
复制
HashMap<String,Object> stringObjectHashMap = new HashMap<>();
boolean isFound = packageList.stream()
                .filter(package -> "Full".equalsIgnoreCase(package.getPackageName()))
                .peek(package ->stringObjectHashMap.put("packageId",package.getPackageId()))
                .flatMap(package -> package.getServiceList().stream())
                .filter(service -> service.getLocation().equalsIgnoreCase("Japan"))
                .peek(service -> stringObjectHashMap.put("serviceId",service.getServiceId()))
                .anyMatch(service -> service.getLocation().equalsIgnoreCase("Japan"));

问题是声纳抱怨在流中使用peek()。它说“根据它的JavaDocs,中间流操作java.util.Stream.peek()”的存在主要是为了支持调试的目的。

有人能提出更好的解决方案吗?

样本输入:

代码语言:javascript
复制
[
    {
        "packageId": 13,
        "packageName": "Normal",
        "serviceList": [
            {
                "serviceId": "100",
                "location": "China"
            }
        ]
    },
    {
        "packageId": 10,
        "packageName": "Full",
        "serviceList": [
            {
                "serviceId": "100",
                "location": "Spain"
            }
        ]
    },
     {
        "packageId": 5,
        "packageName": "Full",
        "serviceList": [
            {
                "serviceId": "100",
                "location": "Japan"
            }
        ]
    }
]

预期产出,

代码语言:javascript
复制
"packageId": 5    //this is from outer list
"serviceId": 100  //this is from inner list

注意: "Full"包可以多次出现。除了位置之外,"Japan"还可以多次出现在服务中。但是,packageName与值"Full"和location "Japan"的组合只能出现一次。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72352454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档