gpt4 book ai didi

java - 嵌套 map 上的流

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:46:59 25 4
gpt4 key购买 nike

我有以下用例。我有一个具有以下结构的嵌套 map :

Map<String, Map<WorkType, List<CostLineItem>>>

我必须遍历 map 并获取 CLObject 列表。如果列表中的单个条目的标识符为 null。我必须为每个 EnumType 生成唯一标识符。我不确定如何使用流来做到这一点?遵循迭代逻辑将清楚我想要完成什么

for(Map.Entry<String, Map<WorkType, List<CostLineItem>>> cliByWorkTypeIterator: clisByWorkType.entrySet()) {
Map<WorkType, List<CostLineItem>> entryValue = cliByWorkTypeIterator.getValue();
for(Map.Entry<WorkType, List<CostLineItem>>cliListIterator : entryValue.entrySet()) {
List<CostLineItem> clis = cliListIterator.getValue();
//if any CLI settlementNumber is zero this means we are in standard upload
//TODO: Should we use documentType here? Revisit this check while doing dispute file upload
if(clis.get(0).getSettlementNumber() == null) {
clis.forEach(f -> f.toBuilder().settlementNumber(UUID.randomUUID().toString()).build());
}
}
}

嵌套循环使代码位样板和脏。有人可以帮我处理这里的流吗?

最佳答案

您可以使用 flatMap遍历所有 List<CostLineItem>所有内部的值 Map

clisByWorkType.values() // returns Collection<Map<WorkType, List<CostLineItem>>>
.stream() // returns Stream<Map<WorkType, List<CostLineItem>>>
.flatMap(v->v.values().stream()) // returns Stream<List<CostLineItem>>
.filter(clis -> clis.get(0).getSettlementNumber() == null) // filters that Stream
.forEach(clis -> {do whatever logic you need to perform on the List<CostLineItem>});

关于java - 嵌套 map 上的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51651579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com