【发布时间】:2016-05-19 22:34:36
【问题描述】:
我正在尝试对大型字符串数组进行排序。我希望它主要按开头的单词排序,基于我的顺序。但是我有超过 1 个具有相同开头单词的项目,所以我希望能够使用在初始单词之后的数字对单词进行排序。
例如:
String[] unordered = {"Pencil 2", "Cat 3", "Pencil 1", "Cat 1", "Cat 2"}
我希望排序的结果是:
String[] ordered = {"Cat 1", "Cat 2", "Cat 3", "Pencil 1", "Pencil 2"}
就目前而言,我正在对列表进行排序,而随后忽略了数字。所以我最终得到了这样的结果:
String somewhat ordered = {"Cat 3", "Cat 1", "Cat 2", "Pencil 2", "Pencil 1"}
我现在的代码如下所示:
String[] sortlist = {"Pencil 2", "Cat 3", "Pencil 1", "Cat 1", "Cat 2"}
String[] Bookorder = {"Cat", "Pencil", etc...}
List<String>[] results = new List[bookorder.length];
LinkedList<String> remainders = new LinkedList<String>();
for (String word : sortlist) {
boolean found = false;
for (int i = 0; i < bookorder.length; i++) {
if (word.startsWith(bookorder[i])) {
if (results[i] == null) results[i] = new LinkedList<String>();
results[i].add(word);
found = true;
break;
}
}
if (!found) {
remainders.add(word);
}
}
finalsortedlist = new ArrayList<String>(sortlist.length);
for (List<String> result : results) {
if (result != null) {
finalsortedlist.addAll(result);
}
}
finalsortedlist.addAll(remainders);
String[] finalsortedarray = new String[finalsortedlist.size()];
finalsortedarray = finalsortedlist.toArray(finalsortedarray);
dblinesequivalent = Arrays.toString(finalsortedarray);
这很好用,只是它不对数字进行排序。如果不弄乱之前的单词排序,我想不出办法。
如果您愿意提供任何帮助,我将不胜感激。提前致谢。
编辑:
我不希望按字母顺序对项目进行排序,它们是根据另一个指定所需顺序的列表进行排序的。
【问题讨论】: