[英]Java Put in specific order to treemap
我有一个很大的列表并将其放入树形图中。
然后我想把“ALL”放在列表的最顶端,但是在“ALL”之前有“AAA”的东西
编辑:我想要对所有其他输入进行排序
List -> List
----- -----
AAA AAA
BBB ALL
CCC BBB
CCC
我可以使用arrayList或其他东西,但我想知道是否有办法控制这种情况。
一种选择是构建一个自定义比较器,始终在其他所有内容之前对单词“ALL”进行排序:
TreeMap<String, T> myMap = new TreeMap<String, T>(new Comparator<String>() {
public int compare(String lhs, String rhs) {
/* See which of the inputs, if any, are ALL. */
bool oneAll = lhs.equals("ALL");
bool twoAll = rhs.equals("ALL");
/* If both are ALL or neither are ALL, just do a normal comparison. */
if (oneAll == twoAll) {
return lhs.compareTo(rhs);
}
/* Otherwise, exactly one of them is ALL. Determine which one it is and
* react accordingly.
*/
else if (oneAll) {
return -1;
} else {
return +1;
}
}
});
这将按升序对所有内容进行排序,但将"ALL"
优先于其他所有内容。
希望这可以帮助!
基本上不要使用TreeMap
。 如果ArrayList
特定顺序放置内容,只需使用ArrayList
或LinkedList
。 TreeMap
按其键的顺序对其条目进行排序。 在这种情况下你不希望这样。
编辑:如果您只关心将ALL置于顶部,那么自定义比较器就可以了。 但是如果你真的希望能够以一种不容易仅通过所涉及的键确定的方式来指定每个条目的位置,那么我坚持认为TreeMap
不是前进的方式。
您可以编写自己的compareTo()
以便ALL始终排在最前面
使用LinkedHashMap将允许您保持与添加到map的元素相同的顺序。 如果您需要自定义订单,可以将自己的比较器与TreeMap一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.