@Test public void zip() { ImmutableBag<String> immutableBag = this.newBag(); List<Object> nulls = Collections.nCopies(immutableBag.size(), null); List<Object> nullsPlusOne = Collections.nCopies(immutableBag.size() + 1, null); List<Object> nullsMinusOne = Collections.nCopies(immutableBag.size() - 1, null); ImmutableBag<Pair<String, Object>> pairs = immutableBag.zip(nulls); Assert.assertEquals( immutableBag, pairs.collect((Function<Pair<String, ?>, String>) Pair::getOne)); Assert.assertEquals( HashBag.newBag(nulls), pairs.collect((Function<Pair<?, Object>, Object>) Pair::getTwo)); ImmutableBag<Pair<String, Object>> pairsPlusOne = immutableBag.zip(nullsPlusOne); Assert.assertEquals( immutableBag, pairsPlusOne.collect((Function<Pair<String, ?>, String>) Pair::getOne)); Assert.assertEquals( HashBag.newBag(nulls), pairsPlusOne.collect((Function<Pair<?, Object>, Object>) Pair::getTwo)); ImmutableBag<Pair<String, Object>> pairsMinusOne = immutableBag.zip(nullsMinusOne); Assert.assertEquals(immutableBag.size() - 1, pairsMinusOne.size()); Assert.assertTrue( immutableBag.containsAllIterable( pairsMinusOne.collect((Function<Pair<String, ?>, String>) Pair::getOne))); Assert.assertEquals( immutableBag.zip(nulls), immutableBag.zip(nulls, HashBag.<Pair<String, Object>>newBag())); }