Java 學習筆記---Java List合併重複型別
阿新 • • 發佈:2019-01-24
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]