我有这堂课:
public class Person implements{
private String name;
private int height;
...
}
人们按身高进行比较。期望两个不同的人可以拥有相同高度的情况似乎是合理的。这就是我写这个比较器的原因:
public static class Compar implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
int r = Integer.compare(o1.height, o2.height);
return r == 0 ? o1.name.compareTo(o2.name) : r;
}
}
这是我的主要内容:
public static void main(String[] args){
TreeSet<Person> ps = new TreeSet<>(new Compar());
ps.add(new Person("Ann", 150));
ps.add(new Person("Jane", 150));
ps.add(new Person("John", 180));
System.out.println(ps);
}
我得到了这个结果:Ann,height = 150 Jane,height = 150 John,height = 180.但是当我想使用方法headSet
时,我希望下一个结果:Ann,height = 150 Jane, height = 150,tr2中没有任何内容。
TreeSet<Person> tr2 = new TreeSet<Person>(new Compar());
Person p = new Person("",150);
tr2 = (TreeSet<Person>) ps.headSet(p,true);
我该如何解决这个问题?
答案 0 :(得分:1)
是的,tr2
中不会显示任何内容,因为.headSet()
会返回此集合部分的视图,其元素严格 <{1}}(不包括)
所有其他p
个对象等于/高于Person
(150,150,180)。如果它们相等,则通过比较器将它们与p
字段进行比较(因为您将name
作为第二个参数传递给true
。自.headSet()
p
以来是一个空字符串,它比其他名称少,因此不包括在内。
此文档为here,我认为您正在寻找.tailSet()
。