我有一个大清单并将其放入树形图中。
然后我想把“ALL”放在列表的最顶端,但是在“ALL”之前有“AAA”的东西
编辑:我想要对所有其他输入进行排序
List -> List
----- -----
AAA AAA
BBB ALL
CCC BBB
CCC
我可以使用arrayList或其他东西,但我想知道 如果有办法控制这种情况。
答案 0 :(得分:6)
一种选择是建立一个自定义比较器,始终在其他所有内容之前对单词“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"
优先于其他所有内容。
希望这有帮助!
答案 1 :(得分:4)
基本上不要使用TreeMap
。如果您想按特定顺序排列,只需使用ArrayList
或LinkedList
。 TreeMap
按其键的顺序对其条目进行排序。在这种情况下你不希望这样。
编辑:如果您只是关注将ALL置于顶部,那么自定义比较器就可以了。但是,如果你真的希望能够以一种不容易仅通过所涉及的密钥确定的方式来指定每个条目的位置,那么我坚持我的建议TreeMap
不是前进的方式。
答案 2 :(得分:1)
您可以编写自己的compareTo()
,以便所有人始终排在首位
答案 3 :(得分:1)
使用LinkedHashMap可以保持与添加到map的元素相同的顺序。如果您需要自定义订单,可以将自己的比较器与TreeMap一起使用。