簡體   English   中英

使用Java Streams搜索復雜的數據結構

[英]Searching in a Complex Data structure using Java Streams

[
 {"productStatus":
    [
     {"status": "spoilt"},
     {"status": "used"}
    ],
 "productMsg":
    [
    {"msg": "Valid"}
    ]
 },
 {"productStatus":
    [
     {"status": "new"},
    ],
 "productMsg":
    [
    {"msg": "Ok"},
    {"customMsg" : "blah blah"}
    ]
 }
]

我將以上數據存儲在List<Map<String, List<Map<String, String>>>> ;

例如:

val is represented by Lombok library.
val firstObj = ImmutableList.of(ImmutableMap.of("status", "spoilt"),
                ImmutableMap.of("status", "new"),
                ImmutableMap.of("status", "used"));
val secondObj = ImmutableList.of(ImmutableMap.of("msg", "Valid"));
val productStatus1 = ImmutableMap.of("productStatus", firstObj,
                "productMsg", secondObj);

val firstObj_1 = ImmutableList.of(ImmutableMap.of("status", "new"));
val secondObj_2 = ImmutableList.of(ImmutableMap.of("msg", "Ok"));
val productStatus_2 = ImmutableMap.of("productStatus", firstObj_1,
                "productMsg", secondObj_2);

val testObj = ImmutableList.of(productStatus1, productStatus_2);

我需要找出productStatus是否是新的,然后獲取所有productMsgs。 例如,在我給出的示例中:我將需要

{"msg": "Ok"},
{"customMsg" : "blah blah"}

對於每個具有新狀態的productStatus,請繼續將其添加到列表中。 基本上,我將需要返回List<Map<String, String>>

我知道如何在傳統的Java for循環方法中進行此操作,我覺得它太笨拙且太長。 是否有使用Streams的整潔方法?

未經測試,但我認為這將滿足您的要求:

List<Map<String, String>> msgs = testObj.stream()
        .filter(obj -> obj.get("productStatus").stream()
                .anyMatch(s -> s.get("status").equals("new")))
        .flatMap(obj -> obj.get("productMsg").stream())
        .collect(Collectors.toList());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM