您的位置:首页 > 其它

TreeSet集合排序方式二:定制排序Comparator

2017-04-17 09:30 330 查看
Comparator有两种实现方式:

1,匿名内部类

2,创建一个类用于实现Comparator,该类创建的对象就是比较器

Person类

public class Person implements Comparable<Person> {
private String name;
private String sex;
private int age;
private Book books;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Book getBooks() {
return books;
}
public void setBooks(Book books) {
this.books = books;
}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age +
", books.name=" + books.getBookName() + ", books.price=" + books.getPrice() + "]";
}
public Person(String name, String sex, int age, Book books) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.books = books;
}
public Person() {
super();
}

}


Book类

package Homework3;

public class Book {
//Book类中 有  书名,书的价格
private String bookName;
private int price;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Book [bookName=" + bookName + ", price=" + price + "]";
}
public Book(String bookName, int price) {
super();
this.bookName = bookName;
this.price = price;
}
public Book() {
super();
}

}


Comparator实现–匿名内部类

public class Test {
public static void main(String[] args){
//Comparator
TreeSet<Person> set2=new TreeSet<>(new Comparator<Person>() {

@Override
public int compare(Person o1, Person o2) {
if(o1.getAge()>o2.getAge()){
return -1;
}else if (o1.getAge()<o2.getAge()) {
return 1;
}else {
CollationKey key=Collator.getInstance().getCollationKey(o1.getName());
CollationKey key2=Collator.getInstance().getCollationKey(o2.getName());
int n=key.compareTo(key2);
if(n>0){
return 1;
}else if (n<0) {
return -1;
}else {
int a=o1.getBooks().getPrice()-o2.getBooks().getPrice();
if(a>0){
return -1;
}else if (a<0) {
return 1;
}else {
CollationKey key3=Collator.getInstance().getCollationKey(o1.getBooks().getBookName());
CollationKey key4=Collator.getInstance().getCollationKey(o2.getBooks().getBookName());
int m=key3.compareTo(key4);
if(m>0){
return 1;
}else if (m<0) {
return -1;
}else {
return 0;
}
}

}
}
}
});
//          第一条件: 年龄 降序
set2.add(new Person("Jane1", "female", 20, new Book("z指环王", 30)));
set2.add(new Person("Jane2", "female", 30, new Book("z指环王", 30)));
//            第二条件: 姓名升序
set2.add(new Person("Ada3", "female", 30, new Book("z指环王", 30)));
//            第三条件: 书的价格   降序
set2.add(new Person("Ada4", "female", 30, new Book("z指环王", 50)));
//            第四条件: 书名     升序
set2.add(new Person("Ada5", "female", 30, new Book("m指环王", 50)));
System.out.println(set2);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: