### Question:
DefaultId implements Id { @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || !(obj instanceof DefaultId)) return false; DefaultId other = (DefaultId) obj; return name.equals(other.name) && tags.equals(other.tags); } DefaultId(String name);   DefaultId(String name, ArrayTagSet tags); @Override String name(); @Override Iterable<Tag> tags(); @Override DefaultId withTag(Tag tag); @Override DefaultId withTag(String key, String value); @Override DefaultId withTags(String... ts); @Override DefaultId withTags(Tag... ts); @Override DefaultId withTags(Iterable<Tag> ts); @Override DefaultId withTags(Map<String, String> ts); @Override String getKey(int i); @Override String getValue(int i); @Override int size(); @Override Id filter(BiPredicate<String, String> predicate); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void tagListFilterByKeyName() { DefaultId id = new DefaultId("foo", ArrayTagSet.create("a", "1", "b", "2")); Assertions.assertEquals(id, id.filterByKey(k -> !k.equals("name"))); }