我需要根据特定的索引名称对Set数据进行排序。我有以下数据:
txt_4: somevalue
txt_2: somevalue
txt_1: somevalue
txt_0: somevalue
txt_3: somevalue
如何对此数据进行排序?感谢。
更新
排序后的预期数据:
txt_0: somevalue
txt_1: somevalue
txt_2: somevalue
txt_3: somevalue
txt_4: somevalue
答案 0 :(得分:10)
使用TreeSet对象。
TreeSet元素使用它们的自然顺序排序,或者在创建时创建时提供的Comparator,具体取决于使用的构造函数。
Set<String> treeSet = new TreeSet<String>();
treeSet.add("txt_4: somevalue");
treeSet.add("txt_1: somevalue");
treeSet.add("txt_0: somevalue");
treeSet.add("txt_3: somevalue");
System.out.println(treeSet);
答案 1 :(得分:2)
使用比较器的完美解决方案: Alphanum算法
人们使用与软件不同的数字对字符串进行排序。大多数排序算法都会比较ASCII值,这会产生与人类逻辑不一致的排序。以下是修复方法。请参阅:http://www.davekoelle.com/alphanum.html
Davekoelle AlphanumComparator.java : http://www.davekoelle.com/files/AlphanumComparator.java
另一种选择是 se.sawano 字母数字比较器:https://github.com/sawano/alphanumeric-comparator
答案 2 :(得分:1)
未定义Set的顺序;你不能整理一套。
您可以做的是将集合中的元素添加到定义订单的数据结构中,例如List,然后对其进行排序。
或者,您可以使用已按排序顺序维护其元素的set实现。这些包括TreeSet和ConcurrentSkipListSet。但请记住,这些实现比您现在使用的更复杂,并且可能会减慢程序的其余部分。
答案 3 :(得分:0)
这不是TreeSet的用途吗?