import lombok.*;
import org.junit.jupiter.api.Test;
import java.util.*;
/*
Comparable是对象自身的比较方式,而Comparator是外部定义的比较方式。
* */
public class T {
//Comparator外部比较器 User实体可以和Comparator解耦
@Test
public void comparatorTest() {
TreeSet<User> treeSet = new TreeSet<>(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
if (o1.id == o2.id) {
//name升序
return o1.name.compareTo(o2.name);
}
return o2.id - o1.id;//id降序
}
});
treeSet.add(User.builder().id(2).name("xixi").build());
treeSet.add(User.builder().id(5).name("haha").build());
treeSet.add(User.builder().id(8).name("xz").build());
treeSet.add(User.builder().id(2).name("hello").build());
treeSet.forEach(System.out::println);
}
@Test
public void comparableTest() {
TreeSet<User2> treeSet = new TreeSet<>();
treeSet.add(new User2(2));
treeSet.add(new User2(1));
treeSet.add(new User2(5));
treeSet.add(new User2(3));
treeSet.forEach(System.out::println);
}
}
@Builder
@Data
class User {
int id;
String name;
}
/*
Comparable 内部比较器
* */
@AllArgsConstructor
@Data
class User2 implements Comparable<User2> {
int id;
@Override
public int compareTo(User2 o) {
return this.id - o.id;
}
}