1. 程式人生 > >Java 學習筆記---Java List合併重複型別

Java 學習筆記---Java List合併重複型別

1、問題描述:
要合併A B 兩個集合(A B 內部不重複),等到C 要求C沒有重複的型別 ;
A.removeAll(B);
A.addAll(B);
2、問題描述:
要合併A B 兩個集合,等到C 要求C沒有重複的型別,重複型別中的權重相加;
想到的方法:
1、排序
2、合併重複

具體程式碼如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
//資料型別 物件類
class A { public String name; public int num; public A(){ } public A(String name, int num) { super(); this.name = name; this.num = num; } public void setName(String name) { this.name = name; } public String getName() { return
name; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } @Override public String toString() { return "A [name=" + name + ", num=" + num + "]"; } // @Override // public boolean equals(Object obj) { // A a=(A)obj;
/// if (this.getName().equals(a.getName())) { // return true; // } // return false; // } } public class MergeColection { @SuppressWarnings("unchecked") public static void main(String[] args) { List<A> aa1=new ArrayList<A>(); aa1.add(new A("A",1)); aa1.add(new A("B",1)); aa1.add(new A("C",1)); List<A> aa2=new ArrayList<A>(); aa2.add(new A("B",1)); aa2.add(new A("E",1)); aa2.add(new A("C",1)); aa2.add(new A("A",1)); aa2.add(new A("A",1)); List<A> a =new ArrayList<A>(); a.addAll(aa1); a.addAll(aa2); for (A a2 : a) { System.err.println("排序前的資料: "+a2); } Collections.sort(a,new comparator()); for (A a2 : a) { System.err.println("排序後的資料: "+a2); } List<A> list=mergeAB (a); for (A a2 : list) { System.err.println("合併名字相同的資料: "+a2); } } public static List<A> mergeAB (List<A> a) { List<A> list = new ArrayList<A>(); A r1 = new A(); A r2=new A(); r1 = a.get(0); for (A aa : a) { if (compare(aa, r1)) { if (r2.getName() != null ) { r2.setNum(r2.getNum() + aa.getNum()); }else if (r2.getName()==null) { r2=r1; } } else { list.add(r2); r1 = aa; r2=r1; } } //如果最後一項,只出現一次 if (!list.contains(r1)) { list.add(r1); } return list; } //物件內部比較 public static boolean compare(Object o1, Object o2) { A a = (A) o1; A a2 = (A) o2; if (a.getName().equals(a2.getName())) { return true; } return false; } // 自定義比較器 static class comparator implements Comparator { public int compare(Object object1, Object object2) {// 實現介面中的方法 A a1 = (A) object1; // 強制轉換 A a2 = (A) object2; return a1.getName().compareTo(a2.getName()); } } }

控制檯輸出的結果:

排序前的資料: A [name=A, num=1]
排序前的資料: A [name=B, num=1]
排序前的資料: A [name=C, num=1]
排序前的資料: A [name=B, num=1]
排序前的資料: A [name=E, num=1]
排序前的資料: A [name=C, num=1]
排序前的資料: A [name=A, num=1]
排序前的資料: A [name=A, num=1]

排序後的資料: A [name=A, num=1]
排序後的資料: A [name=A, num=1]
排序後的資料: A [name=A, num=1]
排序後的資料: A [name=B, num=1]
排序後的資料: A [name=B, num=1]
排序後的資料: A [name=C, num=1]
排序後的資料: A [name=C, num=1]
排序後的資料: A [name=E, num=1]
合併名字相同的資料: A [name=A, num=3]
合併名字相同的資料: A [name=B, num=2]
合併名字相同的資料: A [name=C, num=2]
合併名字相同的資料: A [name=E, num=1]