作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个声明:
searchResults.sort(Comparator.comparing(WCCTableRowData::getD));
其中 getD 是 WCCTableRowData 类中的访问器,searchResults 是 WCCTableRowData 的列表。 WCCTableRowData 类具有从 getA 到 getZ 的访问器。我需要能够根据传入的变量即时设置排序字段。有没有一种优雅的方法可以做到这一点,或者我是否需要一系列 if 语句或类似语句?
更新 1不幸的是,尽管我认为总体上方向是正确的,但接受的答案中的两种方法都没有用。通过方法 2,我得到:
使用方法 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/
我是一名优秀的程序员,十分优秀!