java - BinaryOperator 的身份

标签 java lambda java-8 functional-programming

我在 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/

相关文章:

java - .v() 在 soot 库中是什么意思?

java - 如何使用 Scribe 通过 POST 向自定义 API 发出 OAuth2 授权请求

java - 如何将映射键值收集到列表中,其中值是集合

Java 8 检查字符串是否遵循 b n 模式

java - 如何以兼容模式运行Java?

AspectJ 和 Java8 - 操作数堆栈上的错误类型

java - 从另一个 jar 执行 jar 文件

java - 如何格式化这个字符串以实现正确的日期格式?

具有无限系列的 Java Stream-API 性能

c++ - 在 switch 语句中分配 lambda