### Question:
ConfigValueMapStringView extends AbstractMap<String, ConfigValue> { @Override public Collection<ConfigValue> values() { if (values == null) { values = new AbstractCollection<ConfigValue>() { @Override public Iterator<ConfigValue> iterator() { final Iterator<Entry<String, ConfigValue>> delegate = ConfigValueMapStringView.this.entrySet().iterator(); return new Iterator<ConfigValue>() { @Override public boolean hasNext() { return delegate.hasNext(); } @Override public ConfigValue next() { final Entry<String, ConfigValue> next = delegate.next(); return next != null ? next.getValue() : null; } }; } @Override public int size() { return delegate.size(); } }; } return values; } ConfigValueMapStringView(final Map<String, String> delegate, final String configSourceName,
            final int configSourceOrdinal); @Override int size(); @Override boolean isEmpty(); @Override boolean containsKey(final Object key); @Override boolean containsValue(final Object value); @Override ConfigValue get(final Object key); @Override Set<String> keySet(); @Override Set<Map.Entry<String, ConfigValue>> entrySet(); @Override Collection<ConfigValue> values();  }### Answer:
@Test public void values() { final Collection<ConfigValue> values = sampleMap().values(); assertEquals(2, values.size()); assertTrue(values.contains(null)); assertTrue(values.contains(toConfigValue("my.prop", "1234"))); assertThrows(UnsupportedOperationException.class, () -> values.remove(toConfigValue("my.prop", "1234"))); }