考虑到大小写,我需要对对象(区域)及其名称(区域名称:字符串)进行排序。我尝试使用Java Comparator接口(interface)进行此操作。

class NameComparator implements Comparator<Zone> {
    public int compare(Zone z1, Zone z2) {
        return z1.getZoneName().compareTo(z2.getZoneName());
   }
}

但是,此Comparator仅按字典顺序排序。

例如:区域名称的必需顺序。



电流输出



除了编写原始对象排序方法以外,还有什么方法可以实现此目的?

最佳答案

调整逻辑,将名称都转换为小写或大写,然后进行比较。

public int compare(Zone z1, Zone z2){
  if(z1.getZoneName().toLowerCase().equals(z2.getZoneName().toLowerCase()))
      return z1.getZoneName().compareTo(z2.getZoneName());
  else
      return z1.getZoneName().toLowerCase().compareTo(z2.getZoneName().toLowerCase());
}

使用lambda-
Comparator<Zone> byName = (z1, z2)->{
    if(z1.getZoneName().toLowerCase().equals(z2.getZoneName().toLowerCase()))
       return z1.getZoneName().compareTo(z2.getZoneName());
    else
       return z1.getZoneName().toLowerCase().compareTo(z2.getZoneName().toLowerCase());
};

10-06 07:45