在Java 8中以不区分大小写的方式对字符串值进行排序

如何在不区分大小写的顺序中对字符串值进行排序?

List 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)) ); 

我写的是这样的:

 listofEmployees.stream().sorted(Comparator.comparing(Employee::getName).reversed()) .forEach(s -> System.out.println(s.getName())); 

如何在此处传递字符串不区分大小写的选项?

尝试这个

 Comparator.comparing(Employee::getName, String.CASE_INSENSITIVE_ORDER) 

正如@Tree在他的评论中建议的那样,您可以使用java.text.Collator进行不区分大小写和区分区域的String比较。 以下代码显示了美国英语如何忽略大小写和重音:

 Collator collator = Collator.getInstance(Locale.US); collator.setStrength(Collator.PRIMARY); listOfEmployees.sort(Comparator.comparing(Employee::getName, collator.reversed())); 

当整理者强度设置为PRIMARY ,在比较期间只有PRIMARY差异被认为是显着的。 因此,以下字符串被认为是等效的:

 if (collator.compare("abc", "ABC") == 0) { System.out.println("Strings are equivalent"); } 

您可以将其指定为忽略大小写的第二个参数:

 Comparator.comparing(Employee::getName, String::compareToIgnoreCase).reversed() 

这是以下几种方式之一:

 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

您可以像这样小写或大写:

 listofEmployees.stream() .sorted(Comparator.comparing((Employee e) -> e.getName() .toLowerCase()) // or toUpperCase .reversed()) .forEach(s -> System.out.println(s.getName()));