PrzemyslawGęsieniec:
最近、私は、ネストされたコレクション(リスト内のマップの値)での作業中に問題に出くわしました:
List<Map<String, Object>> items
私の場合、このリストは、10-20地図が含まれています。いくつかの時点で私は価値交換したCalculation
キーのdescription
にをRating
。私はこの解決策を考え出すよう:
items.forEach(e -> e.replace("description","Calculation","Rating"));
場合、それは非常に微細で効率的な解決策になるすべてこのリストのマップがキーと値のペアが含まれています["description", "Calculation"]
。残念ながら、私は知っている、全体で一つだけ、このようなペアが存在することList<Map<String, Object>>
。
質問は:
代わりに、Javaの-8のストリームを使用して、すべてのリストの要素を反復処理のこの1の値を検索と置換のより良い(より効率的な)解決策は、ありますか?
完璧ではそれはそれ上の任意の複雑な/難読化操作をせずに、1つのストリームで行っていることであろう。
アンドリューTobilko:
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"));