我想迭代一个[HttpPost]
public IActionResult CreateOrUpdate2(PurchaseOrderItemList[] poItemData)
并提取Map<Object,List<Object>>
Map.Entry
中List<Object>
中的任何对象(值)满足某个条件。
我可以看到两种方法:
1)显而易见的方法是提取条目集并循环遍历列表(值)。
2)将此Map转换为Guava的MultiMap,循环遍历值,如果满足条件,则标记该键并从地图中提取实际List。
我想避免使用第一种方法,因为它是一种非线性解决方案。还有其他更有效的方法吗?
答案 0 :(得分:0)
不,如果必须检查每个值,则必须检查所有值。要完成所有值,您必须执行以下操作:
public List<Object> getEntriesThatMeetCondition(Map<Object, List<Object>> input) {
List<Map.Entry> output = new ArrayList<>();
Iterator it = input.entrySet().iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
List inputList = (List<Object>) entry.getValue();
for(Object object : inputList) {
if(meetsCondition(object)) {
output.add(entry);
}
}
}
}
在某种意义上,它是线性的,因为您只需要浏览一次。