gpt4 book ai didi

Java 8 Lambda Sort With Variable 方法引用

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:49 25 4
gpt4 key购买 nike

我有一个声明:

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/

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