我需要一种方法将下面提到的JSON转换为List>使用java 8流。这里有一些挑战,我需要一些属性,需要忽略其余的属性。我基本上需要重量和产品。
[
{weight=30, type=cosmatic, product=product-1,product-2,product-3},
{weight=15, type=commercia, product=product-1,product-3},
{weight=50, ramdonField=newValue, product=product-1,product-4},
{weight=2, product=product-1,product-2},
{weight=15, product=product-1},
{weight=25, product=product-1},
{weight=2, product=product-1}
]
我能够通过编写下面的代码来实现这一点,只是想知道是否有更有效的方法来做到这一点。
List<Map<String, Object>> franchiseRulesTemp = new LinkedList<>();
for (Entry<String, Object> test : config.entrySet()) {
try {
if (test.getValue() instanceof Map<?, ?> && ((Map<String, Object>) test.getValue()).containsKey("product")) {
Map<String, Object> mapper = ((Map<String, Object>) test.getValue());
String productList = (String) mapper.get("product");
String[] productListArray = productList.split(",");
for (String product : productListArray) {
Map<String, Object> gameDetails = new HashMap<>();
gameDetails.putAll((Map<String, Object>) test.getValue());
gameDetails.put("product",product);
gameDetails.put("ruleName", test.getKey());
franchiseRulesTemp.add(gameDetails);
}
}
} catch (Exception exception) {
System.out.println("Occured" + exception.getMessage());
}
}
提前致谢。
答案 0 :(得分:0)
有些事情就足够了:
List<Map<String, String>> resultSet =
myList.stream()
.flatMap(map -> map.entrySet()
.stream()
.flatMap(e -> Arrays.stream(e.getValue().split(","))
.map(a -> Map.of(e.getKey(), a))))
.collect(Collectors.toList());
<强>更新强>
修改完成后,我建议您使用属性weight
,type
,product
等创建自定义类。然而,需要调整许多对象,并使用必要的数据填充它并将它们存储在列表中。
当您需要列表中的结果时,您可以流式传输自定义对象列表,然后收集到地图中,提取自定义对象及其产品属性的权重。
不幸的是,使用List<Map<String, String>>
的当前方法并不是一个好的方法。