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())