如何使用整理器按 属性 排序? (Java)

How can I sort by property using a collator ? (Java)

(我用的是Java)

我想使用整理器按 属性 对对象子列表进行排序,以便按字母顺序排序但忽略重音。问题是我尝试了不同的东西并且 none 工作。

这对子列表进行排序但不忽略重音符号:

newList.subList(0, 5).sort(Comparator.comparing(element -> element.getValue()));

这是我要使用的整理器:

Collator spCollator = Collator.getInstance(new Locale("es", "ES"));

我希望输出是一个按 属性 字母顺序排序的子列表,您可以使用 .getValue() 访问它而忽略重音符号。

Collat​​or 也是一个 Comparator。 如果元素是字符串:

List<String> list = Arrays.asList("abc", "xyz", "bde");
Collator spCollator = Collator.getInstance(new Locale("es", "ES"));
list.sort(spCollator);

如果元素是自定义对象:

List<Element> list = Arrays.asList(new Element("abc"), new Element("xyz"), new Element("bde"), new Element("rew"), new Element("aER"),
           new Element("Tre"), new Element("ade"));
   list.subList(0, 4).sort(new MyElementComparator());
   System.out.println(list);

private static class MyElementComparator implements Comparator<Element>{
   Collator spCollator = Collator.getInstance(new Locale("es", "ES"));
   public int compare (Element e1, Element e2){
       return spCollator.compare(e1.getValue(), e2.getValue());
   }
}

或者 lambda 方式:

List<Element> list = Arrays.asList(new Element("abc"), new Element("xyz"), new Element("bde"), new Element("rew"), new Element("aER"),
        new Element("Tre"), new Element("ade"));
Collator spCollator = Collator.getInstance(new Locale("es", "ES"));
list.subList(0, 4).sort((e1, e2)-> spCollator.compare(e1.getValue(), e2.getValue()));
System.out.println(list);

不是使用 Comparator.comparing,而是创建一个 lambda 来首先提取值,然后使用 collat​​or 进行比较。

Collator spCollator = Collator.getInstance(new Locale("es", "ES"));
newList.subList(0, 5).sort((e1, e2) -> spCollator.compare(e1.getValue(), e2.getValue()));