[
{"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。例如在我给出的例子中: 我需要
的 map{"msg": "Ok"},
{"customMsg" : "blah blah"}
对于每个具有新状态的产品状态,请继续将其添加到列表中。基本上我需要返回 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());
关于java - 使用 Java Streams 在复杂数据结构中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45953364/