首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Comparator<T> ( Function<T,U>)将Function<T映射到Comparator<U>?

如何使用Comparator<T> ( Function<T,U>)将Function<T映射到Comparator<U>?
EN

Stack Overflow用户
提问于 2022-08-22 11:12:59
回答 1查看 78关注 0票数 3

我有一个Comparator<Integer>类型的比较器和一个函数Function<Pair<Integer,?>,Integer>,表示为Pair::left (返回Integer)。

我需要一个Comparator<Pair<Integer,?>>型的比较器。

如果我想简单地将一个函数Function<T,U>映射到一个结果函数Function<T,V>,通过一个函数Function<U,V>,我可以简单地应用如下所示的andThen()方法:

代码语言:javascript
复制
Function<Integer, String> toBinary = Integer::toBinaryString;
Function<Pair<Integer, ?>, Integer> left = Pair::left;

var pairToBinary = left.andThen(toBinary); // has type Function<Pair<Integer, ?>, String>

是否有可能以类似的方式获得Comparator<Pair<Integer,?>>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-22 11:34:26

如果我正确理解了这个问题,您可以使用函数pairToBinary作为Comparator.comparing()中的参数来获得Comparator<Pair<Integer,?>>类型的比较器。

代码语言:javascript
复制
record Pair<L, R>(L left, R right) {}
    
Function<Integer, String> toBinary = Integer::toBinaryString;
Function<Pair<Integer, ?>, Integer> left = Pair::left;
var pairToBinary = left.andThen(toBinary); // has type Function<Pair<Integer, ?>, String>
        
Comparator<Pair<Integer, ?>> comparator = Comparator.comparing(pairToBinary);

或者,您可以使用另一种风格的comparing(keyExtractor,keyComparator),在这种情况下,您不需要声明这些函数中的任何一个:

代码语言:javascript
复制
Comparator<Pair<Integer, ?>> comparator1 =
    Comparator.comparing(Pair::left,                    // keyExtractor function
        Comparator.comparing(Integer::toBinaryString)); // keyComparator which is capable of comparing objects produced by keyExtractor

我只有Pair::leftComparator<Integer>

如果您手头上有一个生成IntegerComparator<Integer>的函数,这正是comparing(keyExtractor,keyComparator)的用例。

您需要提供一个函数(Pair::left或其他什么)作为第一个参数和一个比较器,它可以比较该函数生成的对象,作为第二个参数:

代码语言:javascript
复制
Comparator.comparing(Pair::left, myIntComparator)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73444169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档