[英]Handling nested Collections with Java 8 streams
最近,在使用嵌套集合(列表內的Map值)時遇到了一個問題:
List<Map<String, Object>> items
在我的情況下,此列表包含10-20張地圖。 在某些時候,我不得不將值的關鍵description
Calculation
替換為Rating
。 所以我想出了這個解決方案:
items.forEach(e -> e.replace("description","Calculation","Rating"));
如果此列表中的所有映射都包含鍵-值對["description", "Calculation"]
,則將是一種非常有效的解決方案。 不幸的是,我知道整個List<Map<String, Object>>
只有一對這樣的對 。
問題是:
是否有更好(更有效)的解決方案來查找和替換該值,而不是使用Java-8流遍歷所有List元素?
完美的做法是將其完成而不需要任何復雜/混淆的操作。
items.stream()
.filter(map -> map.containsKey("description"))
.findFirst()
.ifPresent(map -> map.replace("description", "Calculation", "Rating"));
您將不得不遍歷該列表,直到找到帶有鍵"description"
的地圖。 拿起第一個,然后嘗試更換。
正如@Holger指出的那樣,如果鍵"description"
並非對於所有地圖都是單一的,則對("description", "Calculation")
是唯一的:
items.stream()
.anyMatch(m -> m.replace("description", "Calculation", "Rating"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.