gpt4 book ai didi

java - 如何使用 Function 将 Comparator 映射到 Comparator

转载 作者:行者123 更新时间:2023-12-05 03:19:27 25 4
gpt4 key购买 nike

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

我需要获得类型为 Comparator<Pair<Integer,?>>比较器 .

如果我想简单地映射一个函数 Function<T,U>结果函数 Function<T,V>虽然是一个函数 Function<U,V>我可以简单地申请 andThen()像这样的方法:

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,?>>以类似的方式?

最佳答案

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

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) ,在这种情况下,您不需要声明任何这些函数:

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

I only have Pair::left and a Comparator<Integer>

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

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

Comparator.comparing(Pair::left, myIntComparator)

关于java - 如何使用 Function<T, U> 将 Comparator<T> 映射到 Comparator<U>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73444169/

25 4 0