Java 使用comparator时如何排除字符串

Java 使用comparator时如何排除字符串,java,comparator,Java,Comparator,现在,我正在使用Comparator对我的对象进行排序 FIRST ITEM SECOND ITEM THIRD ITEM LAST ITEM FORTH ITEM 比较器代码为: public static Comparator<PartyResultVO> sortData = new Comparator<PartyResultVO>() { public int compare(VO vo1, VO vo2)

现在,我正在使用Comparator对我的对象进行排序

   FIRST ITEM
   SECOND ITEM
   THIRD ITEM
   LAST ITEM
   FORTH ITEM
比较器代码为:

public static Comparator<PartyResultVO> sortData = new Comparator<PartyResultVO>()
{

     public int compare(VO vo1, VO vo2)
     return (vo1.getName()).compareTo(vo2.getName());
};
publicstaticcomparatorsortdata=newcomparator()
{
公共整数比较(VOVO1,VOVO2)
return(vo1.getName()).compareTo(vo2.getName());
};
排序非常有效。但我想要的是,我需要将名称为<代码>最后一项的项放在最后。我如何才能仅排除该对象并将其放在末尾。有什么方法可以做到这一点吗


请帮助我。提前谢谢…

您可以为这种情况添加特殊逻辑:

public static Comparator<VO> sortData = new Comparator<VO>()
{
     public int compare(VO vo1, VO vo2) {
         if (vo1.getName().equals("LAST ITEM")) {
              if (vo2.getName().equals("LAST ITEM")) {
                  return 0;
              } else {
                  return 1;
              }
         else if (vo2.getName().equals("LAST ITEM")) {
              return -1;
         }
         return (vo1.getName()).compareTo(vo2.getName());
     }
};
publicstaticcomparatorsortdata=newcomparator()
{
公共整数比较(VOVO1,VOVO2){
if(vo1.getName().equals(“最后一项”)){
if(vo2.getName().equals(“最后一项”)){
返回0;
}否则{
返回1;
}
else if(vo2.getName().equals(“最后一项”)){
返回-1;
}
return(vo1.getName()).compareTo(vo2.getName());
}
};

您可以将状态引入比较器,并使其在特定值下异常工作,返回一个整数以保证它是最后一个。Keppil比较器的扩展示例:

class PartyResultComparator implements Comparator<PartuResultVO> {
    String exceptionalValue;

    public PartyResultComparator(String exceptionalValue) {
        this.exceptionalValue = exceptionalValue;
    }

    public int compare(VO vo1, VO vo2) {
         if (isExceptional(vo1.getName())) {
              return 1;
         else if (isExceptional(vo2.getName())) {
              return -1;
         }

         return (vo1.getName()).compareTo(vo2.getName());
    }

    private boolean isExceptional(String value) {
        // is this value exceptional?
    }
}
类PartyResultComparator实现Comparator{
字符串异常值;
公共部分ResultComparator(字符串异常值){
this.exceptionalValue=exceptionalValue;
}
公共整数比较(VOVO1,VOVO2){
if(IsException(vo1.getName())){
返回1;
else if(IsException(vo2.getName())){
返回-1;
}
return(vo1.getName()).compareTo(vo2.getName());
}
专用布尔值IsException(字符串值){
//这个值是例外吗?
}
}
你能试试这个吗

Collections.sort(list, new Comparator<PartyResultVO>() {

@Override
public int compare(VO vo1, VO vo2) {
    if (vo1.getName().equals("LAST ITEM")) {
          if (vo2.getName().equals("LAST ITEM")) {
              return 0;
          } else {
              return 1;
          }
     else if (vo2.getName().equals("LAST ITEM")) {
          return -1;
     }
        return  vo1.getName().compareTo(vo2.getName());
    }


});
Collections.sort(列表,新比较器(){
@凌驾
公共整数比较(VOVO1,VOVO2){
if(vo1.getName().equals(“最后一项”)){
if(vo2.getName().equals(“最后一项”)){
返回0;
}否则{
返回1;
}
else if(vo2.getName().equals(“最后一项”)){
返回-1;
}
返回vo1.getName().compareTo(vo2.getName());
}
});

较短的实现

public static Comparator<PartyResultVO> sortData = new Comparator<PartyResultVO>() {
     public int compare(VO vo1, VO vo2) {
         return mapToLast(vol.getName()).compareTo(mapToLast(vo2.getName()));
     }
    String mapToLast(String s) {
        return s.contains("LAST") ? "\uFFFF" : s;
    }
}
publicstaticcomparatorsortdata=newcomparator(){
公共整数比较(VOVO1,VOVO2){
返回mapToLast(vol.getName()).compareTo(mapToLast(vo2.getName());
}
字符串映射last(字符串s){
返回s.contains(“LAST”)?“\uFFFF”:s;
}
}

确保比较两个“最后一项”不过,我们返回0。@KennyTM:这与排序无关,但它可能更完整。但我不确定名称是否正确。但它包含lastOn一词。一个不相关的注释:我上周在Keppil Way。@PSR您似乎能够键入
contains
,所以我假设是这样。