union並集
以下是部分方法,並非是所有方法。
//通過set將a、b集合合併,如果某個對象在兩個集合中出現,則新集合中該對象的數量取兩個集合中該對象出現次數的較大數。
public static Collection union(final Collection a, final Collection b) {
ArrayList list = new ArrayList();
Map mapa = getCardinalityMap(a);//對象以及出現次數的map
Map mapb = getCardinalityMap(b);//對象以及出現次數的map
Set elts = new HashSet(a);
elts.addAll(b);
Iterator it = elts.iterator();
while(it.hasNext()) {
Object obj = it.next();
for(int i=0,m=Math.max(getFreq(obj,mapa),getFreq(obj,mapb));i<m;i++) {
list.add(obj);
}
}
return list;
}
intersection 交集
代碼基本同union,區別:
將a、b集合合併,如果某個對象在兩個集合中出現,則新集合中該對象的數量取兩個集合中該對象出現次數的較小數。
retainAll 交集
retainAll方法用於從collection中去除不包含在retain中的元素,retain是要保留的元素。
public static Collection retainAll(Collection collection, Collection retain) {
return ListUtils.retainAll(collection, retain);
}
public static List retainAll(Collection collection, Collection retain) {
List list = new ArrayList(Math.min(collection.size(), retain.size()));
for (Iterator iter = collection.iterator(); iter.hasNext();) {
Object obj = iter.next();
if (retain.contains(obj)) {
list.add(obj);
}
}
return list;
}
removeAll 大bug
(在3.2版本中)其實現居然和retainAll一致,完全不是其描述的功能。慎用!
不過在4.0版本已經修復。
其功能是用來從一個集合中刪除另外一個集合中出現的元素。
disjunction 析取
代碼基本同union,區別: 如果某個對象在兩個集合中出現,則新集合中該對象的數量取兩個集合中該對象出現次數的差。
舉例:
A: {1,2,2,2,3,3,4,5}
B: {3,4,4,5,6,7}
Disjunction: {1,2,2,2,3,4,6,7}
public static Collection disjunction(final Collection a, final Collection b) {
ArrayList list = new ArrayList();
Map mapa = getCardinalityMap(a);
Map mapb = getCardinalityMap(b);
Set elts = new HashSet(a);
elts.addAll(b);
Iterator it = elts.iterator();
while(it.hasNext()) {
Object obj = it.next();
for(int i=0,m=((Math.max(getFreq(obj,mapa),getFreq(obj,mapb)))-(Math.min(getFreq(obj,mapa),getFreq(obj,mapb))));i<m;i++) {
list.add(obj);
}
}
return list;
}
subtract方法
將a集合中的b集合元素全部去除,代碼略
getCardinalityMap方法
獲取集合中每個元素出現的次數map。
isSubCollection
如果 a是b的一個子集,返回true,注意,如果是子集需要滿足,對於某個元素,b中的個數大於等於a中的格式。代碼略
cardinality
obj 在集合中出現的次數
forAllDo閉包使用
public static void forAllDo(Collection collection, Closure closure) {
if (collection != null && closure != null) {
for (Iterator it = collection.iterator(); it.hasNext();) {
closure.execute(it.next());
}
}
}
filter、find
通過實現Predicate接口的一個方法,根據返回值去過濾或者查找某個obj
transform、collect
通過實現Transformer接口的一個方法,對每一個obj做方法內規定的操作。
對於一個collection,會被轉換爲一個list,對於list 會調用transform方法,對於非list的集合會調用collect方法