Java 8 Lambda Sort With Variable 方法引用

标签 java lambda java-8 comparator

我有一个声明:

searchResults.sort(Comparator.comparing(WCCTableRowData::getD));

其中 getD 是 WCCTableRowData 类中的访问器,searchResults 是 WCCTableRowData 的列表。 WCCTableRowData 类具有从 getA 到 getZ 的访问器。我需要能够根据传入的变量即时设置排序字段。有没有一种优雅的方法可以做到这一点,或者我是否需要一系列 if 语句或类似语句?

更新 1 不幸的是,尽管我认为总体上方向是正确的,但接受的答案中的两种方法都没有用。通过方法 2,我得到:

Intelli Sense

使用方法 1,row.getField 不会在 WCCTableRowData 类中选择 getField 方法,我得到类似的“不符合上限”错误。我认为错误是说 WCCTableRowData 类必须实现 Comparable?

最佳答案

一种方法是在 WCCTableRowData 中添加一个方法,可以给它一个字段名并返回该字段的值。

class WCCTableRowData {
    Comparable<?> getField(String name) { ... }
}

String name = "C";
searchResults.sort(Comparator.comparing(row -> row.getField(name)));

如果你不想修改类,那么你可以设置一个外部 map 。

Map<String, Function<WCCTableRowData, Comparable<?>>> getters = new HashMap<>();
getters.put("A", WCCTableRowData::getA);
getters.put("B", WCCTableRowData::getB);
getters.put("C", WCCTableRowData::getC);

String name = "C";
searchResults.sort(Comparator.comparing(getters.get(name)));

关于Java 8 Lambda Sort With Variable 方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028256/

相关文章:

function - "Combinators"的良好解释(对于非数学家)

java - 如何从方法 Collectors.groupingBy 获取有序类型的 map

java - 何时或在什么情况下我应该使用Optional来检查null?

java - Java 8 lambda 表达式的问题

只有 put 和 get 的 Java HashMaps - 可能存在并发问题?

java - 如何将 map 转换为Java中的集合并将 map 的所有元素添加到集合中?

Docker openjdk :8 UnknownHostException

java - 连接被拒绝 : api testing using rest assured

java - 如何将集合划分为任意大小的分区

c# - 请指导我获取以下行 c# lambda 表达式代码