定制排序(在集合中写排序规则)
TreeSet还有一种排序就是定制排序,定制排序时候,需要关联一个Comparator对象,由Comparator提供排序逻辑。下面就是一个使用Lambda表达式代替Comparator对象来提供定制排序的例子。下面是一个定制排序的列子
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class TestSets {
public static void main(String[] args) {
Set set = new TreeSet(new MyCommpare());
set.add(new M(5));
set.add(new M(3));
set.add(new M(9));
System.out.println(set);
}
}
class M {
int age;
public M(int age) {
this.age = age;
}
}
class MyCommpare implements Comparator {
@Override
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.age > m2.age ? 1 : m1.age < m2.age ? -1 : 0;
}
}
当然将Comparator直接写入TreeSet初始化中也可以。如下。
import org.junit.Test;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class TestSets {
public static void main(String[] args) {
Set set = new TreeSet(new MyCommpare());
set.add(new M(5));
set.add(new M(3));
set.add(new M(9));
System.out.println(set);
}
@Test
public void testTreeSet() {
Set set = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.age > m2.age ? 1 : m1.age < m2.age ? -1 : 0;
}
});
set.add(new M(5));
set.add(new M(3));
set.add(new M(9));
System.out.println(set);
}
@Test
public void testTreeSetLam() {
Set set = new TreeSet((o1, o2) -> {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.age > m2.age ? 1 : m1.age < m2.age ? -1 : 0;
});
set.add(new M(5));
set.add(new M(3));
set.add(new M(9));
System.out.println(set);
}
}
class M {
int age;
public M(int age) {
this.age = age;
}
}
class MyCommpare implements Comparator {
@Override
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.age > m2.age ? 1 : m1.age < m2.age ? -1 : 0;
}
}
class Err implements Comparable {
@Override
public int compareTo(Object o) {
return 0;
}



