У меня работает следующий код -
public class Stop {
private Long id;
private String name;
public Stop(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Stop{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
private static class StopComparator implements Comparator<Stop> {
public int compare(Stop o1, Stop o2) {
return o1.getId().compareTo(o2.getId());
}
}
public static void main(String[] args) {
Set<Stop> set = new TreeSet<Stop>(new StopComparator());
set.add(new Stop(102L, "name102"));
set.add(new Stop(66L, "name66"));
set.add(new Stop(72L, "name72"));
System.out.println(set);
}
}
отпечатки -
[Stop {id = 66, name = 'name66'}, Stop {id = 72, name = 'name72'}, Stop {id = 102,
имя = 'name102'}]
Ofc вам необходимо реализовать equals
и hashcode
, чтобы класс вел себя последовательно в каждой Set
реализации, но для TreeSet
это должно работать как есть, поскольку TreeSet
полагается на метод compareTo
при выполнении add
, remove
или contains
операций (вместо equals
, как HashSet
).