@Override public Set<Map.Entry<K, V>> entrySet() { return entrySet0(); }
@Override public int size() { return keySet().size(); }
private EntrySet<K, V> entrySet0() { if (entries == null) { Set<K> keys = keySet(); @SuppressWarnings("unchecked") Map.Entry<K, V>[] array = (Map.Entry<K, V>[]) new Map.Entry<?, ?>[keys.size()]; int index = 0; for (K key : keys) { V value = get(key); assert value != null; array[index++] = new Entry<>(key, value); } entries = new EntrySet<>(array); } return entries; }
@Override public boolean containsKey(Object key) { return get(key) != null; }
@Override public V setValue(V newValue) { return ValueOptionMap.update(getValue(), newValue); } }
/** * building keys. */ @Test public void keys() { Set<String> keys0 = ValueOptionMap.keys(); assertThat(keys0, hasSize(0)); // ordered Set<String> keys1 = ValueOptionMap.keys("a"); assertThat(keys1, contains("a")); Set<String> keysN = ValueOptionMap.keys("a", "b", "c", "d", "e"); assertThat(keysN, contains("a", "b", "c", "d", "e")); // ordered }
@Override public void forEach(BiConsumer<? super K, ? super V> action) { entrySet0().forEach(action); }