Java Map Compute ComputeIfAbsentComputeIfPresentメソッド
Java Map Compute Computeifabsent Computeifpresent Method
前書き
計算 計算のために、現在のキーのnewKey値はoldValueに基づいて導出されます。マージ方法と同様に、計算方法でも関数をカスタマイズできます。
ComputeIfAbsent と ComputeIfPresent これは、現在のキーが存在するかどうかに基づいており、2つの微分法を計算します。一般的な意味は、Computeと一致しています。
default V compute(K key, BiFunction remappingFunction) { Objects.requireNonNull(remappingFunction) V oldValue = get(key) V newValue = remappingFunction.apply(key, oldValue) if (newValue == null) { // delete mapping if (oldValue != null || containsKey(key)) { // something to remove remove(key) return null } else { // nothing to do. Leave things as they were. return null } } else { // add or replace old mapping put(key, newValue) return newValue } }
計算例:
Map ve = new HashMap() //Insert elements into Map ve.put('key',new StringBuffer('value1')) System.out.println(ve) ve.compute('key',(k,v)-> { if (v == null) return new StringBuffer() return v.append('dd') }) ve.compute('key1',(k,v)-> new StringBuffer())
既存のキーは機能に移動し、存在しないキーはデフォルトで初期化されます
{key=value1} {key1=, key=value1dd}
ComputeIfAbsentの例:
Map ve = new HashMap() //Insert elements into Map ve.put('key',new StringBuffer('value1')) ve.computeIfAbsent('keyAdd', k -> new StringBuffer()) ve.computeIfAbsent('key',k -> new StringBuffer())
既存のキーは処理されず、存在しないキーは機能に従って処理されます
{key=value1, keyAdd=}
ComputeIfPresent:
Map ve = new HashMap() //Insert elements into Map ve.put('key',new StringBuffer('value1')) ve.computeIfPresent('key',(K,V) -> V.append('dd')) ve.computeIfPresent('key123',(K,V) -> V.append('dd')) System.out.println(ve)
既存のキーは処理され、存在しないキーは処理されず、デフォルトのメソッドは実行されません
{key=value1dd}