Len*_*nie 167 java sorting collections list alphabetical
我有一个List<String>包含国家/地区名称的对象.如何按字母顺序对此列表进行排序?
Thi*_*ilo 201
假设这些是字符串,使用方便的静态方法sort...
java.util.Collections.sort(listOfCountryNames)
Run Code Online (Sandbox Code Playgroud)
Len*_*mel 139
如果您被迫使用该List,或者您的程序具有类似的结构
然后Thilos的回答将是最好的方式.如果你把它与Tom Hawtin的建议结合起来-你会得到:
java.util.Collections.sort(listOfCountryNames, Collator.getInstance());
Run Code Online (Sandbox Code Playgroud)
如果您可以自由决定,并且您的应用程序可能会变得更复杂,那么您可能会更改代码以使用TreeSet.这种集合在插入时对您的条目进行排序.无需调用sort().
Collection<String> countryNames =
new TreeSet<String>(Collator.getInstance());
countryNames.add("UK");
countryNames.add("Germany");
countryNames.add("Australia");
// Tada... sorted.
Run Code Online (Sandbox Code Playgroud)
这有一些微妙但重要的优点:
TreeSet<String> countyNames并立即知道:这是一个排序的字符串集合,没有重复,我可以肯定这在任何时候都是如此.简短声明中的大量信息.使用正确的集合来完成正确的任务是编写简短和无错误代码的关键.在这种情况下,它不是示范性的,因为您只需保存一行.但我已经停止计算,当他们想要确保没有重复项时,我经常看到有人使用List,然后自己构建该功能.或者更糟糕的是,当你真正需要Map时使用两个列表.
不要误会我的意思:使用Collections.sort不是错误或缺陷.但是在很多情况下,TreeSet更清晰.
Vit*_*nko 27
您可以使用Java 8 Stream或Guava创建新的排序副本:
// Java 8 version
List<String> sortedNames = names.stream().sorted().collect(Collectors.toList());
// Guava version
List<String> sortedNames = Ordering.natural().sortedCopy(names);
Run Code Online (Sandbox Code Playgroud)
另一种选择是通过Collections API进行就地排序:
Collections.sort(names);
Run Code Online (Sandbox Code Playgroud)
Tir*_*ath 25
迟到总比不到好!以下是我们如何做到这一点(仅限学习目的) -
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class SoftDrink {
String name;
String color;
int volume;
SoftDrink (String name, String color, int volume) {
this.name = name;
this.color = color;
this.volume = volume;
}
}
public class ListItemComparision {
public static void main (String...arg) {
List<SoftDrink> softDrinkList = new ArrayList<SoftDrink>() ;
softDrinkList .add(new SoftDrink("Faygo", "ColorOne", 4));
softDrinkList .add(new SoftDrink("Fanta", "ColorTwo", 3));
softDrinkList .add(new SoftDrink("Frooti", "ColorThree", 2));
softDrinkList .add(new SoftDrink("Freshie", "ColorFour", 1));
Collections.sort(softDrinkList, new Comparator() {
@Override
public int compare(Object softDrinkOne, Object softDrinkTwo) {
//use instanceof to verify the references are indeed of the type in question
return ((SoftDrink)softDrinkOne).name
.compareTo(((SoftDrink)softDrinkTwo).name);
}
});
for (SoftDrink sd : softDrinkList) {
System.out.println(sd.name + " - " + sd.color + " - " + sd.volume);
}
Collections.sort(softDrinkList, new Comparator() {
@Override
public int compare(Object softDrinkOne, Object softDrinkTwo) {
//comparision for primitive int uses compareTo of the wrapper Integer
return(new Integer(((SoftDrink)softDrinkOne).volume))
.compareTo(((SoftDrink)softDrinkTwo).volume);
}
});
for (SoftDrink sd : softDrinkList) {
System.out.println(sd.volume + " - " + sd.color + " - " + sd.name);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用两个参数Collections.sort.您将需要一个适当的Comparator处理适当的案例(即词汇,而不是UTF16订购),例如通过可获得的案例java.text.Collator.getInstance.
除非你只用无重音的英语排序字符串,否则你可能想要使用Collator.它会正确排序变音符号,可以忽略大小写和其他语言特定的东西:
Collections.sort(countries, Collator.getInstance(new Locale(languageCode)));
Run Code Online (Sandbox Code Playgroud)
您可以设置collator强度,请参阅javadoc.
以下是斯洛伐克的一个例子:
List<String> countries = Arrays.asList("Slovensko", "Švédsko", "Turecko");
Collections.sort(countries);
System.out.println(countries); // outputs [Slovensko, Turecko, Švédsko]
Collections.sort(countries, Collator.getInstance(new Locale("sk")));
System.out.println(countries); // outputs [Slovensko, Švédsko, Turecko]
Run Code Online (Sandbox Code Playgroud)
通过使用Collections.sort(),我们可以对列表进行排序。
public class EmployeeList {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> empNames= new ArrayList<String>();
empNames.add("sudheer");
empNames.add("kumar");
empNames.add("surendra");
empNames.add("kb");
if(!empNames.isEmpty()){
for(String emp:empNames){
System.out.println(emp);
}
Collections.sort(empNames);
System.out.println(empNames);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
sudheer
kumar
surendra
kb
[kb, kumar, sudheer, surendra]
Run Code Online (Sandbox Code Playgroud)
这是你要找的
listOfCountryNames.sort(String::compareToIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用以下行
Collections.sort(listOfCountryNames, String.CASE_INSENSITIVE_ORDER)
Run Code Online (Sandbox Code Playgroud)
它与Thilo的建议类似,但不会区分大小写字符。