@Override public void remove(final MapPredicate<K, V> predicate) { SmartMap<K, V> tempMap = createNewInstance(internalMap); clear(); for (Map.Entry<K, V> entry : tempMap.entrySet()) { if (!predicate.test(entry.getKey(), entry.getValue())) { put(entry.getKey(), entry.getValue()); } } }
@Override public void mergeWith(final SmartMap<K, V> anotherMap, final BinaryFunction<V, V> mergeFunct) { SmartMap<K, V> resultMap = createNewInstance(internalMap); clear(); for (Map.Entry<K, V> entry : anotherMap.entrySet()) { if (resultMap.containsKey(entry.getKey())) { V mergedVal = mergeFunct.apply(resultMap.get(entry.getKey()), entry.getValue()); internalMap.put(entry.getKey(), mergedVal); } else { internalMap.put(entry.getKey(), entry.getValue()); } } }