簡體   English   中英

使用Java 8流處理嵌套Collection

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM