@Override public boolean equals(Object obj) { if (!(obj instanceof Set)) return false; @NotNull Set<Entry<K, V>> set = (Set<Entry<K, V>>) obj; if (set.size() != size()) return false; for (@Nullable Entry<K, V> entry : set) { if (entry == null) return false; K key = entry.getKey(); if (key == null) return false; @Nullable V value = mapView.get(key); if (!BytesUtil.equals(entry.getValue(), value)) return false; } return true; } }
default boolean replaceIfEqual(K key, V oldValue, V newValue) { if (containsKey(key) && BytesUtil.equals(get(key), oldValue)) { put(key, newValue); return true; } else { return false; } }
default boolean removeIfEqual(K key, V value) { if (!isKeyType(key)) return false; if (containsKey(key) && BytesUtil.equals(get(key), value)) { remove(key); return true; } else { return false; } }
@Override public boolean equals(Object obj) { if (obj instanceof Map) { @NotNull Map map = (Map) obj; // todo use longSize() if (size() != map.size()) return false; try { for (int i = 0; i < kvStore.segments(); i++) { kvStore.entriesFor(i, e -> { if (!BytesUtil.equals(e.getValue(), map.get(e.getKey()))) throw new InvalidSubscriberException(); }); } return true; } catch (InvalidSubscriberException e) { return false; } } return false; }
@Override public boolean containsValue(Object value) { checkValue(value); try { for (int i = 0; i < kvStore.segments(); i++) { kvStore.entriesFor(i, e -> { if (BytesUtil.equals(e.getValue(), value)) throw new InvalidSubscriberException(); }); } return false; } catch (InvalidSubscriberException e) { return true; } }