如何让耳机正常工作?

How to make Headset work correctly?

我有这个 class:

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);

我该如何解决这个问题?

是的,tr2 中不会出现任何内容,因为 .headSet() returns 此集合的元素严格 less 的部分视图比 p(独占)。

您的所有其他 Person 对象 equal/higher 比 p(150、150、180)。如果它们相等,您可以通过比较器通过它们的 name 字段比较它们(因为您将 true 作为第二个参数传递给 .headSet()。因为 pname 是一个空字符串,它小于其他名称,因此不包括在内。

这方面的文档是 here, and I think you are looking for .tailSet()