使用 HashMap<string,integer> 作为类型对 TreeSet 进行排序
sort a TreeSet with HashMap<string,integer> as its type
例如,
TreeSet<HashMap<String,Integer>> myTree = new TreeSet<HashMap<String,Integer>>();
我想根据 HashMap 中的 Integer 值对这个树集进行排序。有什么好的方法可以做到这一点吗?
如所写 ("sort this treeset based on the Integer value from HashMap"),此要求要么没有意义,要么指的是 complicated/confusing 设计。
您真的要根据值集来订购一组地图吗?或者您实际上只是使用 Map 作为 Tuple2 等的替代品?
如果您的意图是前者,那么当然,您可以创建一个客户比较器;但是该 Comparator 的语义对大多数人来说并不明显,您最终可能会得到一个在 insertions/deletions.
上表现出 O(n^2)-ish 行为的实现
如果是后者,那么您的系统将再次令人困惑,但其不变量的建模会更加糟糕。也就是说,您 假设 每个 Map 只包含一个键值绑定,虽然您当然可以通过运行时检查强制执行此约束,将其记录在 javadoc 等中,但这是违反直觉的Map类型的使用。在这种情况下,正如 JB Nizet 提到的那样,只创建一个带有 String 和 Integer 字段的容器 class 会好得多,您可以使用 Comparator 轻松地对这个 class 的集合进行排序,或者通过使 class 实现 Comparable。
您需要设计一个自定义比较器并将其作为构造函数提供给您的TreeSet
,
public static Set<HashMap<String, Integer>> myTree = new TreeSet<>(
new Comparator<HashMap<String, Integer>>() {
@Override
public int compare(HashMap<String, Integer> o1,
HashMap<String, Integer> o2) {
return (o2.get(key)).compareTo(o1.get(key));
}
});
只需将 key
替换为您的整数键即可。
如果你想让它以相反的方式排序,
替换,
o2.get(key)).compareTo(o1.get(key)
有,
o1.get(key)).compareTo(o2.get(key)
例如,
TreeSet<HashMap<String,Integer>> myTree = new TreeSet<HashMap<String,Integer>>();
我想根据 HashMap 中的 Integer 值对这个树集进行排序。有什么好的方法可以做到这一点吗?
如所写 ("sort this treeset based on the Integer value from HashMap"),此要求要么没有意义,要么指的是 complicated/confusing 设计。
您真的要根据值集来订购一组地图吗?或者您实际上只是使用 Map 作为 Tuple2 等的替代品?
如果您的意图是前者,那么当然,您可以创建一个客户比较器;但是该 Comparator 的语义对大多数人来说并不明显,您最终可能会得到一个在 insertions/deletions.
上表现出 O(n^2)-ish 行为的实现如果是后者,那么您的系统将再次令人困惑,但其不变量的建模会更加糟糕。也就是说,您 假设 每个 Map 只包含一个键值绑定,虽然您当然可以通过运行时检查强制执行此约束,将其记录在 javadoc 等中,但这是违反直觉的Map类型的使用。在这种情况下,正如 JB Nizet 提到的那样,只创建一个带有 String 和 Integer 字段的容器 class 会好得多,您可以使用 Comparator 轻松地对这个 class 的集合进行排序,或者通过使 class 实现 Comparable。
您需要设计一个自定义比较器并将其作为构造函数提供给您的TreeSet
,
public static Set<HashMap<String, Integer>> myTree = new TreeSet<>(
new Comparator<HashMap<String, Integer>>() {
@Override
public int compare(HashMap<String, Integer> o1,
HashMap<String, Integer> o2) {
return (o2.get(key)).compareTo(o1.get(key));
}
});
只需将 key
替换为您的整数键即可。
如果你想让它以相反的方式排序,
替换,
o2.get(key)).compareTo(o1.get(key)
有,
o1.get(key)).compareTo(o2.get(key)