gpt4 book ai didi

java-8 - 使用collect时如何避免多次流式传输

转载 作者:行者123 更新时间:2023-12-04 18:04:41 25 4
gpt4 key购买 nike

我结合了使用 jooq 查询数据库和使用流对结果进行后处理的组合。但是我觉得我的代码不是很可读,也不够简洁。如何以更好地表达我的意图的方式改进我的代码。

sql
.select(field("USER_NAME", String.class))
.from(table("CWD_USER"))
.fetch()
.stream()
.map(f -> f.getValue(field("USER_NAME", String.class)))
.collect(Collectors.groupingBy(s -> StringUtils.split(s, "-")[0], Collectors.counting()))
.entrySet().stream()
.sorted(new java.util.Comparator<Entry<String, Long>>() {
@Override
public int compare(Entry<String, Long> o1,
Entry<String, Long> o2) {
return o2.getValue().compareTo(o1.getValue());
}
})
.forEach(e -> System.out.println(String.format("%13s: %3d", e.getKey(), e.getValue())));

首先,我遇到了多重流媒体的问题。我首先从 jooq 流式传输结果,然后流式传输收集的 map 。比较器似乎也很突出。当然我可以用它来上课,但也许还有另一种解决方案。

最佳答案

我不能说 JOOQ 部分,但 Stream API 部分看起来不错。在排序之前,您必须中间收集以了解计数。请注意,此类比较器已在 JDK 中实现:它是 Map.Entry.comparingByValue() .您可以使用它(添加 Comparator.reverseOrder() 参数以逆序排序):

sql
.select(field("USER_NAME", String.class))
.from(table("CWD_USER"))
.fetch()
.stream()
.map(f -> f.getValue(field("USER_NAME", String.class)))
.collect(Collectors.groupingBy(s -> StringUtils.split(s, "-")[0], Collectors.counting()))
.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.forEach(e -> System.out.println(String.format("%13s: %3d", e.getKey(), e.getValue())));

关于java-8 - 使用collect时如何避免多次流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32732918/

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