Java 使用nullsFirst对用户定义的对象进行排序的比较器

Java 使用nullsFirst对用户定义的对象进行排序的比较器,java,jsp,collections,comparator,Java,Jsp,Collections,Comparator,我有下面的向量表 Class abc{ String view; String viewDesc; } Data: viewDesc = null viewDesc = null viewDesc = Maint viewDesc = Maint viewDesc = null viewDesc = uncategorized viewDesc = uncategorized viewDesc = null viewDesc = null viewDesc = Maint

我有下面的向量表

Class abc{
     String view;
     String viewDesc;
}

Data: 
viewDesc = null
viewDesc = null
viewDesc = Maint
viewDesc = Maint
viewDesc = null
viewDesc = uncategorized
viewDesc = uncategorized
viewDesc = null
viewDesc = null
viewDesc = Maint

I want to sort nullsFirst then alphabetically in reverse order as fallows
viewDesc = null
viewDesc = null
viewDesc = null
viewDesc = null
viewDesc = uncategorized
viewDesc = uncategorized
viewDesc = uncategorized
viewDesc = Maint
viewDesc = Maint
viewDesc = Maint

public class SortbyViewComparator implements Comparator<abc> {

    public int compare(abc object1, abc object2)
    {
        return object1.getViewDesc().compareToIgnoreCase(object2.getViewDesc ());
    }
}
这给了我以下的错误

此接口比较器的静态方法只能作为Comparator.nullsFirst访问

@死水 这一解决方案正在密切合作。我至少没有出错。
现在我来整理一下。实际上在代码中,如果它为null,那么我将null附加到未分类的。 所以空值是没有分类的。 viewDesc=null viewDesc=null viewDesc=null viewDesc=null
viewDesc=Maint
viewDesc=维护 viewDesc=维护 viewDesc=未分类 viewDesc=未分类 viewDesc=未分类

我想要这样的输出。所有初始和后续维护、HAP、PPA等无效和未分类

viewDesc = null
viewDesc = null
viewDesc = null
viewDesc = null         
viewDesc = uncategorized
viewDesc = uncategorized
viewDesc = uncategorized
viewDesc = Maint                                                              
viewDesc = Maint
viewDesc = Maint
像这样使用它

Comparator.nullsFirst(Comparator.comparing(abc::getViewDesc)); 

如果您使用的是java-7,那么您可以编写自定义的
比较器
,先排序
null
,然后按逆字母顺序排序

public class SortbyViewComparator implements Comparator<abc> {

   public int compare(abc object1, abc object2) {

      if (object1.getViewDesc() == null && object2.getViewDesc() == null) {
            return 0;

        } else if (object1.getViewDesc() == null) {
            return -1;

        } else if (object2.getViewDesc() == null) {
            return 1;
        }

        return object1.getViewDesc().compareTo(object2.getViewDesc());
   }
}

这个方法来自java-8,为了使用它,您需要安装我在上面尝试过的java-8解决方案。但我得到的错误方法引用只允许在源代码级别1.8或更高版本。我确信这是由于jdk版本而不是代码问题。我使用的是WebSphere9.0.0.6JDK,即JDK1.8。我更新了问题中的注释。此解决方案正在密切合作。请尝试我的更新答案,仅反转比较条件应该对您有效@SruthiI尝试了反转,它向我提供了有关所述结果的信息。我在原始问题中使用反转结果后进行了更新。您做错了什么,两个条件的工作方式不一样请仔细检查@Sruthi
public class SortbyViewComparator implements Comparator<abc> {

   public int compare(abc object1, abc object2) {

      if (object1.getViewDesc() == null && object2.getViewDesc() == null) {
            return 0;

        } else if (object1.getViewDesc() == null) {
            return -1;

        } else if (object2.getViewDesc() == null) {
            return 1;
        }

        return object1.getViewDesc().compareTo(object2.getViewDesc());
   }
}
Comparator.nullsFirst(Comparator.comparing(abc::getViewDesc).reversed())