我有一个包含国家名称的List<String>对象。我如何按字母顺序对这个列表排序?
当前回答
使用Collections.sort的两个参数。你会想要一个合适的比较器,处理大小写适当(即词法,而不是UTF16排序),比如通过java.text.Collator.getInstance获得。
其他回答
在一行中,使用Java 8:
list.sort(Comparator.naturalOrder());
除非您只使用无重音的英文对字符串进行排序,否则您可能希望使用Collator。它将正确排序变音符符号,可以忽略大小写和其他特定于语言的东西:
Collections.sort(countries, Collator.getInstance(new Locale(languageCode)));
你可以设置排序器的强度,参见javadoc。
下面是一个斯洛伐克语的例子,Š应该在S后面,但在UTF中Š应该在Z后面。
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]
您可以使用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);
另一种选择是通过Collections API就地排序:
Collections.sort(names);
更简单地说,您可以使用方法引用。
list.sort(String::compareTo);
JAVA 8相同:-
//Assecnding order
listOfCountryNames.stream().sorted().forEach((x) -> System.out.println(x));
//Decending order
listOfCountryNames.stream().sorted((o1, o2) -> o2.compareTo(o1)).forEach((x) -> System.out.println(x));
推荐文章
- 如何在POM.xml中引用环境变量?
- 如何在android中复制一个文件?
- Python中方括号括起来的列表和圆括号括起来的列表有什么区别?
- 将整数转换为字符串,以逗号表示千
- 接口方法的最终参数-有什么意义?
- Java中的@UniqueConstraint注释
- 如何在清洁模式下运行eclipse ?如果我们这样做会发生什么?
- 获取java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory异常
- Java中的正则表达式命名组
- c#和Java的主要区别是什么?
- 什么是NullPointerException,我如何修复它?
- 在Java中使用“final”修饰符
- 无法在Flutter上找到捆绑的Java版本
- 如何在Kotlin解析JSON ?
- 如何在新的材质主题中改变背面箭头的颜色?