我正在检查treemap的headmap方法,它返回的映射部分的键严格小于tokey。所以我希望输出是b,c,但它只返回b。我做了一件奇怪的事,我改变了compareto方法,如下所示
return this.priority > o.priority ? 1 : -1;
然后它开始返回C,B,这是我所期待的。我确信这是不正确的,但我如何才能同时得到B,C,它的优先级比A低,我在哪里得到的是错误的。谢谢。
NavigableMap treeMap = new TreeMap();
PolicyTypePriorityWrapper a = new PolicyTypePriorityWrapper("A", 2);
PolicyTypePriorityWrapper b = new PolicyTypePriorityWrapper("B", 1);
PolicyTypePriorityWrapper c = new PolicyTypePriorityWrapper("C", 1);
treeMap.put(a, "A");
treeMap.put(b, "B");
treeMap.put(c, "C");
NavigableMap map = treeMap.headMap(a, false);
Set policyTypePriorityWrappers = map.keySet();
for (PolicyTypePriorityWrapper pol: policyTypePriorityWrappers) {
System.out.println(pol.getPolicyType());
}
策略类型PriorityWrapper.java
class PolicyTypePriorityWrapper implements Comparable {
private String policyType;
private int priority;
public PolicyTypePriorityWrapper(final String policyType, final int priority) {
this.policyType = policyType;
this.priority = priority;
}
public String getPolicyType() {
return this.policyType;
}
public int getPriority() {
return this.priority;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PolicyTypePriorityWrapper that = (PolicyTypePriorityWrapper) o;
if (priority != that.priority) return false;
return policyType.equals(that.policyType);
}
@Override
public int hashCode() {
int result = policyType.hashCode();
result = 31 * result + priority;
return result;
}
@Override
public int compareTo(final PolicyTypePriorityWrapper o) {
return Integer.compare(this.priority, o.priority);
}
}