[英]Sorting string value in a case-insensitive manner in Java 8
How do I sort string values in case-insensitive order in the following? 如何在不区分大小写的顺序中对字符串值进行排序?
List<Employee> listofEmployees = Arrays.asList(
new Employee(1, "aaa", Arrays.asList(123, 345, 678)),
new Employee(1, "bbb", Arrays.asList(91011, 121314, 1516117)),
new Employee(2, "ccc", Arrays.asList(181920, 212223, 242526)),
new Employee(3, "ddd", Arrays.asList(272829, 303132, 333435)),
new Employee(4, "BBB", Arrays.asList(29, 332, 33))
);
I wrote like this: 我写的是这样的:
listofEmployees.stream().sorted(Comparator.comparing(Employee::getName).reversed())
.forEach(s -> System.out.println(s.getName()));
How do I pass a string case insensitive option here? 如何在此处传递字符串不区分大小写的选项?
试试这个
Comparator.comparing(Employee::getName, String.CASE_INSENSITIVE_ORDER)
As @Tree suggested in comments, one can use the java.text.Collator
for a case-insensitive and locale-sensitive String
comparison. 正如@Tree在评论中建议的那样,可以使用
java.text.Collator
进行不区分大小写和区分区域的String
比较。 The following shows how both case and accents could be ignored for US English: 以下显示美国英语如何忽略大小写和重音:
Collator collator = Collator.getInstance(Locale.US);
collator.setStrength(Collator.PRIMARY);
listOfEmployees.sort(Comparator.comparing(Employee::getName, collator.reversed()));
When collator strength is set to PRIMARY
, then only PRIMARY
differences are considered significant during comparison. 当整理者强度设置为
PRIMARY
,在比较期间只有PRIMARY
差异被认为是显着的。 Therefore, the following Strings are considered equivalent: 因此,以下字符串被认为是等效的:
if (collator.compare("abc", "ABC") == 0) {
System.out.println("Strings are equivalent");
}
您可以将其指定为忽略大小写的第二个参数:
Comparator.comparing(Employee::getName, String::compareToIgnoreCase).reversed()
This is one of many ways: 这是众多方式之一:
listofEmployees.stream()
.sorted((o1, o2) -> o1.getName().compareToIgnoreCase(o2.getName()))
.forEach(s -> System.out.println(s.getName()));
看起来有一个Comparator通过compareToIgnoreCase命令String对象,你可以在这里阅读文档: https : //docs.oracle.com/javase/8/docs/api/java/lang/String.html#CASE_INSENSITIVE_ORDER
You can lowercase or uppercase it like this: 您可以像这样小写或大写:
listofEmployees.stream()
.sorted(Comparator.comparing((Employee e) -> e.getName()
.toLowerCase()) // or toUpperCase
.reversed())
.forEach(s -> System.out.println(s.getName()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.