gpt4 book ai didi

具有匿名内部类的 Java 比较器接口(interface) NullsLast

转载 作者:行者123 更新时间:2023-12-02 08:46:15 25 4
gpt4 key购买 nike

我创建了一个方法,它根据给定的实体(我使用 JPA)返回 java 中的表的原始 html。现在我希望能够使用比较器接口(interface)对表进行排序。因此,我创建了比较器接口(interface)的匿名内部类,以对实体的属性进行排序。这工作正常,但我的问题是现在我无法对 NullsFirst 或 Nullslast 进行排序。我尝试过的一切都不起作用。有人知道如何解决这个问题吗?

这是代码:

if (!sortProperty.equals("") && sortProperty != null) {
Collections.sort(list, new Comparator<T>() {
public int compare(T e1, T e2) {
Method sortGetter = null;
try {
for (PropertyDescriptor pd : Introspector.getBeanInfo(entity).getPropertyDescriptors()) {
if (pd.getName().equals(sortProperty) && pd.getReadMethod() != null) {
sortGetter = pd.getReadMethod();
}
}
} catch (IntrospectionException e) {
e.printStackTrace();
}

try {
if (sortGetter.getReturnType().equals(String.class)) {
return sortGetter.invoke(e1).toString().compareTo(sortGetter.invoke(e2).toString());
} else if (sortGetter.getReturnType().equals(Integer.TYPE)) {
return (Integer) sortGetter.invoke(e1) - (Integer) sortGetter.invoke(e2);
} else if (sortGetter.getReturnType().equals(Date.class)) {
return ((Date) sortGetter.invoke(e1)).compareTo((Date) sortGetter.invoke(e2));
} else if (sortGetter.getReturnType().equals(Timestamp.class)) {
return ((Timestamp) sortGetter.invoke(e1)).compareTo((Timestamp) sortGetter.invoke(e2));
}
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
return 0;
}
});
}

最佳答案

sortGetter.invoke(e1)sortGetter.invoke(e2) 拉出到变量(为了清楚起见,省略了 try/catch):

Object o1 = sortGetter.invoke(e1);
Object o2 = sortGetter.invoke(e2);

检查是否为空,如果为空,则返回:

if (o1 == null || o2 == null) {
// This results in nulls last. Use != for nulls first.
return Boolean.compare(o1 == null, o2 == null);
}

现在您可以继续执行 if (sortGetter.getReturnType().equals(String.class)) 类型逻辑(您显然不需要调用 sortGetter.invoke( e1) 并再次sortGetter.invoke(e2))。

关于具有匿名内部类的 Java 比较器接口(interface) NullsLast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61066052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com