java - 尝试为给定字段上的给定类创建比较器时出错

标签 java sorting comparator

我正在尝试创建一个在类的字段上重新返回比较器的函数,但是当我尝试获取 o2 的值时,在 Comparable v2 = (Comparable ) field.get(o2);,表示 lambda 参数无法转换为对象。有人可以帮忙吗?

public Comparator comp(String className, String fieldName) throws Exception {
    Comparator comparator = Comparator.comparing((o1, o2) -> {
        Class aClass = null;
        try {
            aClass = Class.forName(className);
            Field field = aClass.getDeclaredField(fieldName);
            field.setAccessible(true);
            Comparable v1 = (Comparable) field.get(o1);
            Comparable v2 = (Comparable) field.get(o2);
            return v1.compareTo(v2);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    });
    return comparator;
}

最佳答案

您正在使用 Comparator.comparing 方法,但您传入的实际上是比较器的实现。您可以摆脱该方法调用并使用:

Comparator comparator = (o1, o2) -> {
    Class aClass = null;
    try {
        aClass = Class.forName(className);
        Field field = aClass.getDeclaredField(fieldName);
        field.setAccessible(true);
        Comparable v1 = (Comparable) field.get(o1);
        Comparable v2 = (Comparable) field.get(o2);
        return v1.compareTo(v2);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 0;
};
return comparator;
<小时/>

或者,您可以继续使用 Comparator.comparing 方法,但请记住,您应该传入提取字段值的函数:

public Comparator comp(String className, String fieldName) throws Exception {
    Class aClass = Class.forName(className);
    Field field = aClass.getDeclaredField(fieldName);
    field.setAccessible(true);
    Comparator comparator = Comparator.comparing(o1 -> {
        try {
            Comparable v1 = (Comparable) field.get(o1);
            return v1;
        } catch (Exception e) {
            throw new IllegalArgumentException(e);
        }
    });
    return comparator;
}

关于java - 尝试为给定字段上的给定类创建比较器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60806867/

相关文章:

java - TreeSet 自定义比较器算法 .. 字符串比较

java - Android无法显示部分通过socket传输的图像

apache - 在使用 apache poi 替换 Microsoft 2007 (HWPFDocument) 文档的内容时需要帮助

java - 将 JSONArray 转换为 JSONObject 数组

python - 如何按django中的计算值排序

excel - 按值对 Excel 列进行排序

mysql 按事件名称排序

java - Java中对象的优先级队列

c++ - 使用 qsort 对每个字符串进行排序,然后对字符串集进行排序

jdk 1.3 中的 Java 拆分