gpt4 book ai didi

java - 使用 Java 8 流进行动态排序?

转载 作者:搜寻专家 更新时间:2023-11-01 03:16:29 27 4
gpt4 key购买 nike

长话短说,我正在使用 JDBI DAO 访问数据。很难在其中包含动态订单的查询。因此,我计划在获取查询结果后使用 Java 8 流来执行此操作作为后处理步骤。

问题是比较器的工作方式必须静态声明对象的方法。

shepherds = shepherds.stream()
.sorted(Comparator.comparing(Shepherd::getId).reversed())
.collect(Collectors.toList());

我怎样才能用这样的变量动态地做到这一点

orderBy = id
orderDirection = ASC

以便我可以参数化此方法调用?

例如

if(orderDirection.equals("ASC"))
shepherds.stream().sorted(Comparator.comparing(orderBy));
else
shepherds.stream().sorted(Comparator.comparing(orderBy).reversed());

最佳答案

最简单的方法可能是构建一个Map(除非您真的不能在数据库端这样做,这应该是您的主要关注点),其中Key 看起来像:

class Key {
String field;
Direction direction; // enum
// getters/setters/hashcode/equals
}

只需预先创建这个Map:

Map<Key, Comparator<Shepherd>> map = new HashMap<>();
map.put(new Key("id", Direction.ASC), Comparator.comparing(Shepard::getId))
map.put(new Key("id", Direction.DESC), Comparator.comparing(Shepard::getId).reversed())

另一方面,我认为可以通过 LambdaMetafactory 动态创建这个真正,但它相当复杂。

关于java - 使用 Java 8 流进行动态排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48620581/

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