package com.levelup.java.collections; import static org.junit.Assert.assertEquals; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.apache.commons.collections.CollectionUtils; import org.apache.log4j.Logger; import org.junit.Test; import com.google.common.collect.Sets; /** * This java example will demonstrate finding * the symmetric difference of two sets. * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/symmetric-difference-of-two-sets/'>Symmetric difference of two sets</a> */ public class SymmetricDifferenceOfTwoSets { private static final Logger logger = Logger.getLogger(SymmetricDifferenceOfTwoSets.class); Set<String> yourFriends = Sets.newHashSet( "Desiree Jagger", "Benedict Casteel", "Evon Saddler", "Toby Greenland", "Norine Caruana", "Felecia Houghton", "Lanelle Franzoni", "Armandina Everitt", "Inger Honea", "Autumn Hendriks"); Set<String> myFriends = Sets.newHashSet( "Karrie Rutan", "Desiree Jagger", "Armandina Everitt", "Arlen Nowacki", "Ward Siciliano", "Mira Yonts", "Marcelo Arab", "Autumn Hendriks", "Mazie Hemstreet", "Toby Greenland"); @Test public void symmetric_set_difference_java () { Set<String> yourFriendsOrMyFriends = new HashSet<String>(yourFriends); yourFriendsOrMyFriends.addAll(myFriends); logger.info(yourFriendsOrMyFriends.size()); //16 logger.info(yourFriendsOrMyFriends); Set<String> tmp = new HashSet<String>(yourFriends); tmp.retainAll(myFriends); yourFriendsOrMyFriends.removeAll(tmp); assertEquals(12, yourFriendsOrMyFriends.size()); } @Test public void symmetric_set_difference_guava () { Set<String> yourFriendsOrMyFriends = Sets.symmetricDifference(yourFriends, myFriends); assertEquals(12, yourFriendsOrMyFriends.size()); } @Test public void symmetric_set_difference_apache_commons () { @SuppressWarnings("rawtypes") Collection yourFriendsOrMyFriends = CollectionUtils.disjunction(yourFriends, myFriends); assertEquals(12, yourFriendsOrMyFriends.size()); } }