BaggageImpl { public void remove(ByteString namespace, ByteString key) { if (namespace != null && key != null) { SetMultimap<ByteString, ByteString> namespaceData = contents.get(namespace); if (namespaceData != null) { namespaceData.removeAll(key); if (namespaceData.isEmpty()) { contents.remove(namespace); } } } } BaggageImpl();   BaggageImpl(Map<ByteString, SetMultimap<ByteString, ByteString>> contents); byte[] toByteArray(); ByteString toByteString(); static BaggageImpl deserialize(byte[] byteRepr); static BaggageImpl deserialize(ByteString byteRepr); boolean contains(ByteString namespace, ByteString key); boolean hasNamespace(ByteString namespace); Set<ByteString> get(ByteString namespace, ByteString key); void remove(ByteString namespace, ByteString key); void removeAll(ByteString namespace); void replace(ByteString namespace, ByteString key, ByteString value); void replace(ByteString namespace, ByteString key, Iterable<? extends ByteString> values); void add(ByteString namespace, ByteString key, ByteString value); Set<ByteString> namespaces(); Set<ByteString> keys(ByteString namespace); void moveEntries(ByteString fromNamespace, ByteString toNamespace); void merge(BaggageImpl other); boolean isEmpty(); BaggageImpl split();  }
@Test public void testRemoveNonexistAndNull() { BaggageImpl b = new BaggageImpl(); ByteString myname = ByteString.copyFrom("namespace".getBytes()); ByteString myname2 = ByteString.copyFrom("namespace2".getBytes()); b.remove(myname, ByteString.copyFrom("notexist".getBytes())); b.remove(myname, null); b.remove(myname2, ByteString.copyFrom("notexist".getBytes())); }