我正在尝试以简短的方式对String数组进行排序。 我正在尝试使用Collections.sort,但我不明白为什么它不排序任何东西。 代码:
public static String[] FishNamesSorted;
.....
List<String> nameslist = new ArrayList<String>();
nameslist.toArray(FishNamesSorted);
Collections.sort(nameslist, String.CASE_INSENSITIVE_ORDER); <--- NOT WORKING
Collections.sort(nameslist, new Comparator<String>() { <--- NOT WORKING
@Override
public int compare(String p1, String p2) {
if (p1 == null) {
return 1;
}
if (p2 == null) {
return -1;
}
return p1.compareToIgnoreCase(p2);
}
});
两种情况都有结果:
Whyyyy?
答案 0 :(得分:5)
Collections.sort(list)
绝对有效。代码中的问题是您在排序之前将列表放入数组。如果在将列表放入数组之前先对列表进行排序,则应对数组进行排序
List<String> nameslist = new ArrayList<String>();
/* add elements to namesList */
Collections.sort(nameslist);
Object[] fishNamesSorted = nameslist.toArray();
答案 1 :(得分:0)
您应该在nameslist
数组排序后将FishNamesSorted
放在 String[] FishNamesSorted;
// creating and initializing list,
List<String> nameslist = new ArrayList<String>();
// Adding some data in your list
nameslist.add("Poecilia Latipinna");
nameslist.add("Poecilia Reticulata");
nameslist.add("Notropis Chrosomus");
nameslist.add("Pseudomugil Gertrudae");
// sorting your list,
Collections.sort(nameslist);
// print sorted list
for (String s : nameslist){
System.out.println(s);
}
System.out.println("===================");
// convert the sorted list to an array and assign it
// a String array.
FishNamesSorted = nameslist.toArray((new String[nameslist.size()]));
// print your String array,
for (String s : FishNamesSorted){
System.out.println(s);
}
数组中,而您现在没有这样做。
看看,
Arrays.parallelSort(type)
仅供参考,如果您使用的是Java 8,则可以更快地完成排序过程。
Java 8提供了一个API,用于使用Collection.sort
对任何类型的数组进行排序,它以与Collections.sort
相同的方式执行排序,但具有并行实现。
Java Collections提供的当前排序实现 框架&gt; (
Arrays.sort
和Collections.sort
)都执行排序 在调用线程中顺序操作。这个增强会 提供目前提供的同一组排序操作 数组类,但使用了并行实现 Fork / Join框架。这些新的API仍然是同步的 到调用线程,因为它不会继续进行排序 操作直到并行排序完成。
要实现它,请在上面的代码中将Arrays.parallelSort
替换为Collections.sort(nameslist);
替换,
Arrays.parallelSort(nameslist.toArray(new String[nameslist.size()]));
用,
{{1}}
答案 2 :(得分:-1)
解决方案是
Arrays.sort(FishNamesSorted, String.CASE_INSENSITIVE_ORDER)
我误解了它的运作方式