关于对象数组删除重复的一个棘手问题
有这样一个数组如下
序号 姓名 年龄 身高
01 张三 10 170
02 李四 20 175
03 马五 20 175
04 王六 20 175
05 孙七 23 180
06 陈八 23 180
07 赵九 30 160
08 吴十 30 160
....
如何只通过年龄与身高去除重复的元素。
而姓名不管,只保留第一次出现的名字
去除重复后变成如下数组
序号 姓名 年龄 身高
01 张三 10 170
02 李四 20 175
03 孙七 23 180
04 赵九 30 160
....
这个问题困扰我很久,请好人帮忙解决一下。最好给出代码例子。
用数组或list做出来都可以。
cdsn高人多我想不会令我失望,小弟万分感谢 !!!!
先给50分,解决了困扰剩下的分再都给好心的大哥大姐们 棘手问题
[解决办法]
Users users =new Users("01","张三 ",10,170);
Users users1 =new Users("02","wangwu ",20,180);
Users users2 =new Users("03","zhangliu",20,180);
Users users3 =new Users("04","张qi ",10,170);
Users users4 =new Users("05","wu三 ",20,170);
Users users5 =new Users("05","wu三 ",10,170);
List<Users> userList = new ArrayList<Users>();
userList.add(users);
userList.add(users1);
userList.add(users2);
userList.add(users3);
userList.add(users4);
userList.add(users5);
List<Users> userListb = new ArrayList<Users>();
for(int i=0;i<userList.size();i++) {
boolean flg = false;
for(int j=0;j<i;j++) {
if(userList.get(i).getAge() == userList.get(j).getAge() && userList.get(i).getHigh() == userList.get(j).getHigh()) {
flg = true;
continue;
}
}
if(!flg) {
userListb.add(userList.get(i));
}
}
[解决办法]
Map<String,User> map = new HashMap<String,User>
map.put(user1.getTall+user1.getAge,user1);
//对每个user都做这个操作,先put进map里的user会因为后put的user的key而被覆盖
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
List<User> list = new ArrayList<User>();
while(it.hasNext())
{
list.add(map.get(it.next()));
}
public class Users {
private String id;
private String name;
private int age;
private int height;
public Users(String id, String name, int age, int height) {
super();
this.id = id;
this.name = name;
this.age = age;
this.height = height;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Users other = (Users) obj;
if (age != other.age)
return false;
if (height != other.height)
return false;
return true;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
@Override
public String toString() {
return "Users [id=" + id + ", name=" + name + ", age=" + age
+ ", height=" + height + "]";
}
}
import java.util.ArrayList;
import java.util.List;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//System.out.println("1233");
Users[] users = new Users[8];
users[0] = new Users("01", "张三", 10, 170);
users[1] = new Users("02", "李四 ", 20, 175);
users[2] = new Users("03", "马五 ", 20, 175);
users[3] = new Users("04", "王六 ", 20, 175);
users[4] = new Users("05", "孙七", 23, 180);
users[5] = new Users("06", "陈八 ", 23, 180);
users[6] = new Users("07", "赵九 ", 30, 160);
users[7] = new Users("08", "吴十 ", 30, 160);
List<Users> list = new ArrayList<Users>();
for (Users user : users) {
if(!list.contains(user)){
list.add(user);
}
}
System.out.println(list.size());
for (Users newUser : list) {
System.out.println(newUser);
}
}
}
public class Test {
public static void main(String[] args) throws Exception{
//目标数组
Object[][] array = new Object[][]{{"张三",10,170},
{"李四",20,175},
{"马五",20,175},
{"王六",20,175},
{"孙七",23,180},
{"陈八",23,180},
{"赵九",30,160},
{"吴十",30,160}};
List temp = new ArrayList(); //结果用list承载
for(int i=0,len=array.length;i<len;i++){
Object[] option = array[i];
if(option==null){ //如果为null,则跳过
continue;
}
temp.add(option);
Object con1 = option[1];
Object con2 = option[2];
for(int j=i+1;j<len;j++){
Object[] ob = array[j];
if(con1.equals(ob[1]) && con2.equals(ob[2])){ //如果年龄、身高都相等,则将其设为null
array[j]=null;
}
}
//System.out.println(option[0]+","+option[1]+","+option[2]); //输出结果
}
Object[] resultArray = temp.toArray(); //结果数组
}
}
User[] users = new User[]{new User(01, "张三", 10, 170)
,new User(02, "李四", 20, 175)
.....};
Map<Integer, User> usersMap = new HashMap<Integer, User>();
Map<String, String> userIndex = new HashMap<String, String>();
for (User user : users) {
usersMap.put(user.getNum(), user);
String index = user.getAge() + "," + user.getHeight()
if (userIndex.containsKey(index)) {
userIndex.put(index, userIndex.get(index) + "," + user.getNum());
} else {
userIndex.put(index, user.getNum());
}
}
User[] resultUsers = new User[userIndex.size()];
int i = 0;
for (String key : userIndex.keySet()) {
String firstUserNum = userIndex.get(key).split(",")[0];
resultUsers[i++] = usersMap.get(firstUserNum);
}