| 68 | 1 package fschmidt.util.java; | 
|  | 2 | 
|  | 3 import java.util.Collection; | 
|  | 4 import java.util.Collections; | 
|  | 5 import java.util.Map; | 
|  | 6 import java.util.HashMap; | 
|  | 7 import java.util.List; | 
|  | 8 import java.util.ArrayList; | 
|  | 9 import java.util.Set; | 
|  | 10 import java.util.HashSet; | 
|  | 11 import java.util.LinkedHashSet; | 
|  | 12 | 
|  | 13 | 
|  | 14 public final class CollectionUtils { | 
|  | 15 	private CollectionUtils() {}  // never | 
|  | 16 | 
|  | 17 	public static <K,V> Map<K,V> optimizeMap(Map<K,V> map) { | 
|  | 18 		switch( map.size() ) { | 
|  | 19 		case 0: | 
|  | 20 			return Collections.emptyMap(); | 
|  | 21 		case 1: | 
|  | 22 			Map.Entry<K,V> entry = map.entrySet().iterator().next(); | 
|  | 23 			return Collections.singletonMap(entry.getKey(),entry.getValue()); | 
|  | 24 		default: | 
|  | 25 			return new HashMap<K,V>(map); | 
|  | 26 		} | 
|  | 27 	} | 
|  | 28 | 
|  | 29 	public static <T> List<T> optimizeList(List<T> list) { | 
|  | 30 		switch( list.size() ) { | 
|  | 31 		case 0: | 
|  | 32 			return Collections.emptyList(); | 
|  | 33 		case 1: | 
|  | 34 			return Collections.singletonList(list.get(0)); | 
|  | 35 		default: | 
|  | 36 			return new ArrayList<T>(list); | 
|  | 37 		} | 
|  | 38 	} | 
|  | 39 | 
|  | 40 	public static <T> Set<T> optimizeSet(Set<T> set) { | 
|  | 41 		switch( set.size() ) { | 
|  | 42 		case 0: | 
|  | 43 			return Collections.emptySet(); | 
|  | 44 		case 1: | 
|  | 45 			return Collections.singleton(set.iterator().next()); | 
|  | 46 		default: | 
|  | 47 			return new HashSet<T>(set); | 
|  | 48 		} | 
|  | 49 	} | 
|  | 50 | 
|  | 51 	public static <T> Set<T> optimizeLinkedSet(Set<T> set) { | 
|  | 52 		switch( set.size() ) { | 
|  | 53 		case 0: | 
|  | 54 			return Collections.emptySet(); | 
|  | 55 		case 1: | 
|  | 56 			return Collections.singleton(set.iterator().next()); | 
|  | 57 		default: | 
|  | 58 			return new LinkedHashSet<T>(set); | 
|  | 59 		} | 
|  | 60 	} | 
|  | 61 | 
|  | 62 	public static boolean intersects(Set set,Iterable col) { | 
|  | 63 		for( Object obj : col ) { | 
|  | 64 			if( set.contains(obj) ) | 
|  | 65 				return true; | 
|  | 66 		} | 
|  | 67 		return false; | 
|  | 68 	} | 
|  | 69 | 
|  | 70 	public static boolean intersects(Set set,Object[] col) { | 
|  | 71 		for( Object obj : col ) { | 
|  | 72 			if( set.contains(obj) ) | 
|  | 73 				return true; | 
|  | 74 		} | 
|  | 75 		return false; | 
|  | 76 	} | 
|  | 77 | 
|  | 78 } |