我在 Java8 的 UnaryOperator 接口(interface)中看到下面的一段代码,它对参数不做任何事情并返回相同的值。
static <T> UnaryOperator<T> identity() {
return t -> t;
}
BinaryOperator 有没有接受两个相同类型的参数并返回一个值的东西
static <T> BinaryOperator<T> identity() {
return (t,t) -> t;
}
为什么我问这个问题是为了满足以下要求,
List<String> list = Arrays.asList("Abcd","Abcd");
Map<String,Integer> map = list.stream().collect(Collectors.toMap(str->str,
str->(Integer)str.length(),(t1,t2)->t1));
System.out.println(map.size());
在上面的代码中,我不想对同一个键的两个值做任何事情,我只想返回一个值,因为在我的例子中,肯定值是相同的。 由于我没有使用 t2 值声纳抛出错误,所以我发现在 java8 中是否有类似 UnaryOperator.identity() 的东西 BinaryOpertor
最佳答案
你的问题没有意义。如果您将建议的 BinaryOperator.identity
方法粘贴到 IDE 中,您会立即看到它会提示标识符 t
被声明了两次。
要解决这个问题,我们需要为每个参数设置不同的标识符:
return (t, u) -> t;
现在我们可以清楚地看到这不是一个identity 函数。这是一种接受两个参数并返回第一个参数的方法。因此,最好的名称是 getFirst
。
回答您关于 JDK 中是否有类似内容的问题:没有。使用身份函数是一个常见的用例,因此为此定义一个方法很有用。任意返回两个参数的第一个不是一个常见的用例,并且有一个方法可以做到这一点是没有用的。
关于java - BinaryOperator 的身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52296075/