package org.rhq.enterprise.server.resource.metadata; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class CollectionsUtil { /** * Return a set containing those element that are in reference, but not in first. Both input sets are not modified * * @param <T> * @param first * @param reference * * @return */ static <T> Set<T> missingInFirstSet(Set<T> first, Set<T> reference) { Set<T> result = new HashSet<T>(); if (reference != null) { // First collection is null -> everything is missing if (first == null) { result.addAll(reference); return result; } // else loop over the set and sort out the right items. for (T item : reference) { // if (!first.contains(item)) { // result.add(item); // } boolean found = false; Iterator<T> iter = first.iterator(); while (iter.hasNext()) { T f = iter.next(); if (f.equals(item)) { found = true; break; } } if (!found) result.add(item); } } return result; } /** * Return a new Set with elements that are in the first and second passed collection. * If one set is null, an empty Set will be returned. * @param <T> Type of set * @param first First set * @param second Second set * * @return a new set (depending on input type) with elements in first and second */ static <T> Set<T> intersection(Set<T> first, Set<T> second) { Set<T> result = new HashSet<T>(); if ((first != null) && (second != null)) { result.addAll(first); // result.retainAll(second); Iterator<T> iter = result.iterator(); boolean found; while (iter.hasNext()) { T item = iter.next(); found = false; for (T s : second) { if (s.equals(item)) found = true; } if (!found) iter.remove(); } } return result; } }