gpt4 book ai didi

java - 如何链接和应用一系列比较器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:15:03 24 4
gpt4 key购买 nike

我有一个未分类项目流和一个比较器流。我想通过使用“thenComparing”(Multisort)将所有比较器应用到流中是否有比以下代码更优雅的方法来实现此目的?

Stream unsorted = ...;
Stream<Comparator> comparators = ...;

Comparator compareFunc = comparators.reduce(null, (a, b) -> {
if(a == null) {
return b;
}else {
return a.thenComparing(b);
}

});

Stream result = unsorted.sorted(compareFunc);

最佳答案

不要为比较器使用标识值。如果 comparators 流为空(即不包含任何 Comparator),则不应排序:

Stream result=comparators.reduce(Comparator::thenComparing)
.map(unsorted::sorted).orElse(unsorted);

请注意,如果 comparators 流仅包含一个 Comparator,则该 Comparator 将是缩减的结果。


传递给 Optional.map 的方法引用可能需要一些经验才能习惯。因此,可能值得使用更冗长的 lambda 语法来显示那里发生了什么:

Stream<String> result=comparators.reduce(Comparator::thenComparing)
.map((comparator) -> unsorted.sorted(comparator)).orElse(unsorted);

这是编程风格或个人喜好的问题,可能会随着时间的推移而改变。

关于java - 如何链接和应用一系列比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25850008/

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