读书人

java技术题,该怎么解决

发布时间: 2013-09-26 10:32:34 作者: rapoo

java技术题
java技术题,该怎么解决

请教各位大牛一个问题?

有一个list集合中包含很多的A对象,A对象有5个字段,且每个对象的字段有值。

现在有一个B对象,B对象也有和A一样的字段,只是有部分字段没有值,如何判断list集合包含B这样的对象。

例如 List<Object> list = new ArrayList <Object> ();
A a1 =new A ();
A a2 =new A ();
A a3 =new A ();
list.add(a1);
list.add(a2);
list.add(a3);
B b1 = new B();
java 技术
[解决办法]
不知道是不是这个意思

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListHava {
public static void main(String[] args) {
List<Object> list = new ArrayList<Object>();
A a1 = new A();
A a2 = new A();
A a3 = new A();
list.add(a1);
list.add(a2);
list.add(a3);
B b1 = new B();
list.add(b1);
System.out.println(listHaveEqual(list, a1, b1));
}

public static boolean listHaveEqual(List<Object> l, Object p, Object q) {
if((l.contains(p)&&l.contains(q))==false){
return false;
}
Class pclass = p.getClass();
Class qclass = q.getClass();
Field[] f1 = pclass.getDeclaredFields();
Field[] f2 = qclass.getDeclaredFields();
for(int i=0;i<f1.length;i++){
f1[i].setAccessible(true);
}
for(int i=0;i<f2.length;i++){
f2[i].setAccessible(true);
}
for (Field f : f1) {
System.out.println(f);
String n = f.getName();
Class t = f.getType();
Boolean equal = false;
for (Field ff : f2) {


if (ff.getName().equals(n) && ff.getType().equals(t)) {
equal = true;
break;
}

}
if (equal == false) {
return false;
}
}
return true;

}
}

class A {
int i = 1;
int t = 3;
boolean q = false;

}

class B {
int i = 2;
int t = 4;
boolean q = true;
String r = "dsfa";

}


[解决办法]
首先测试两个对象是否在同一个集合里面,然后比较两者的对象的字段,若p对象所拥有的所有字段都是q对象所拥有的(不管值多少),则返回true,反之false

读书人网 >J2EE开发

热点推荐