JAVA新手求教,为什么我TreeSet集合类排序后只输出了一个对象

qq_24504075 2015-09-14 09:42:35
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

/**
* @author kaka
*
*/
public class Test {

/**
* @param args
*/

public static void main(String[] args) {
Set<Persons> set = new TreeSet<>(new Comparator<Persons>() {

@Override
public int compare(Persons o1, Persons o2) {
// TODO 自动生成的方法存根
if (o1 == null || o2 == null) {
throw new NullPointerException();
} else if (o1.getSalary() < o2.getSalary()) {
return 1;
} else if (o1.getSalary() > o2.getSalary()) {
return -1;
} else if (o1.getSalary() == o2.getSalary()) {
if (o1.getAge() < o2.getAge()) {
return -1;
} else if (o1.getAge() > o2.getAge()) {
return 1;
} else if (o1.getSalary() == o2.getSalary()
&& o1.getAge() == o2.getAge()) {
if(o1.getName().compareTo(o2.getName())<o1.getName().compareTo(o2.getName())){
return -1;
}else if(o1.getName().compareTo(o2.getName())>o1.getName().compareTo(o2.getName())){
return 1;
}else {
return 0;
}
} else if (o1.getSalary() == o2.getSalary()
&& o1.getAge() == o2.getAge()
&& o1.getName().equals(o2.getName())) {
if (o1.getBook().getPrice() < o2.getBook().getPrice()) {
return -1;
} else if (o1.getBook().getPrice() > o2.getBook()
.getPrice()) {
return 1;
} else if (o1.getBook().getPrice() == o2.getBook()
.getPrice()) {
o1.getBook().getBookName()
.compareTo(o2.getBook().getBookName());
}
}
}
return 0;
}
});
Books book1 = new Books("水浒", 300f);
Books book2 = new Books("三国", 500f);
Books book3 = new Books("西游", 250f);
Persons person1 = new Persons("a", 30, 250f, book1);
Persons person2 = new Persons("b", 30, 250f, book2);
Persons person3 = new Persons("c", 30, 250f, book3);
set.add(person1);
set.add(person2);
set.add(person3);
Iterator<Persons> iter = set.iterator();
while (iter.hasNext()) {
Persons p = iter.next();
System.out.println(p);
}
}

}
...全文
165 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmyangym 2015-09-15
  • 打赏
  • 举报
回复
比较方法有点乱,我整理了一下,供参考:

			public int compare(Persons o1, Persons o2) {
				// TODO 自动生成的方法存根
				if (o1 == null || o2 == null) {
					throw new NullPointerException();
				}

				// ---------------------------------------
				if (o1.getSalary() < o2.getSalary()) {
					return 1;
				} else if (o1.getSalary() > o2.getSalary()) {
					return -1;
				} else {//这块不要用else if了,只有一种情况了,用else if ,后边还得加 返回语句。
						//下面都一样。o1.getSalary() == o2.getSalary()
					if (o1.getAge() < o2.getAge()) {
						return -1;
					} else if (o1.getAge() > o2.getAge()) {
						return 1;
					} else {//o1.getAge() == o2.getAge()
						if (o1.getName().compareTo(o2.getName()) != 0)  {//不相等,直接返回
							return o1.getName().compareTo(o2.getName());
						} else {//o1.getName().compareTo(o2.getName() == 0
							if (o1.getBooks().getPrice() < o2.getBooks()
									.getPrice()) {
								return -1;
							} else if (o1.getBooks().getPrice() > o2.getBooks()
									.getPrice()) {
								return 1;
							} else {//直接返回o1.getBooks().getBookName().compareTo(o2.getBooks().getBookName());
								return o1.getBooks().getBookName()
										.compareTo(o2.getBooks().getBookName());
							}
						}
					}
				}
			}
		});
设计失 2015-09-15
  • 打赏
  • 举报
回复
你自己把比较器中的条理理清楚之后才能把程序正常运行!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧