@Override
    public boolean retainAll(Collection<?> c) {
        return c.stream()
                .filter(e -> !map.containsKey(e))
                .map(e -> map.remove(e) != null)
                .reduce(Boolean::logicalOr)
                .orElse(false);
    }
@Test
    @Ignore("retainAll appears to violate the documented semantics because it does" +
            " not properly remove the items that are not in the Collection parameter.")
    public void testRetainAll() {
        ExtendedSet<TestValue> set = new ExtendedSet<>(Maps.newConcurrentMap());
        TestValue small = new TestValue("foo", 1);
        assertTrue(set.add(small));
        TestValue medium = new TestValue("goo", 2);
        assertTrue(set.add(medium));
        TestValue large = new TestValue("shoo", 3);
        assertTrue(set.add(large));
        TestValue extreme = new TestValue("who", 4);
        assertTrue(set.add(extreme));
        ArrayList<TestValue> firstvals = new ArrayList<TestValue>();
        firstvals.add(medium);
        firstvals.add(extreme);
        set.retainAll(firstvals);
        assertTrue(set.contains(medium));
        assertTrue(set.contains(extreme));
        assertFalse(set.contains(small));
        assertFalse(set.contains(large));
        ArrayList<TestValue> secondval = new ArrayList<TestValue>();
        secondval.add(medium);
        set.retainAll(secondval);
        assertFalse(set.contains(extreme));
        assertTrue(set.contains(medium));
    }