我以前读过几本Java8教程。
现在我遇到了以下主题:java支持咖喱吗?
在这里,我看到以下代码:
IntFunction<IntUnaryOperator> curriedAdd = a -> b -> a + b;
System.out.println(curriedAdd.apply(1).applyAsInt(12));
我知道这个例子总结了两个元素,但我无法理解其结构:
a -> b -> a + b;
根据表达式的左边部分,此行应实现以下功能:
R apply(int value);
在此之前,我只遇到过只有一支箭的Lambdas。
添加括号可能会使这一点更加清楚:
IntFunction<IntUnaryOperator> curriedAdd = a -> (b -> (a + b));
或者中间变量可能会有所帮助:
IntFunction<IntUnaryOperator> curriedAdd = a -> {
IntUnaryOperator op = b -> a + b;
return op;
};
一个代码
因此,一个<代码>的Int函数
a -> b -> a + b;
^ | |
| ---------
| ^
| |
| The IntUnaryOperator (that takes an int, b) and return an int (the sum of a and b)
|
The parameter you give to the IntFunction
如果你使用匿名类来“分解”lambda,也许会更清楚:
IntFunction<IntUnaryOperator> add = new IntFunction<IntUnaryOperator>() {
@Override
public IntUnaryOperator apply(int a) {
return new IntUnaryOperator() {
@Override
public int applyAsInt(int b) {
return a + b;
}
};
}
};
如果将其表示为非简写lambda语法或前lambda Java匿名类语法,则会更清楚发生了什么。。。
原来的问题。为什么有两支箭?简单来说,有两个函数正在定义。。。第一个函数是定义函数的函数,第二个函数是该函数的结果,它恰好也是函数。每个都需要一个-
IntFunction<IntUnaryOperator> curriedAdd = (a) -> {
return (b) -> {
return a + b;
};
};
IntFunction<IntUnaryOperator> curriedAdd = new IntFunction<IntUnaryOperator>() {
@Override
public IntUnaryOperator apply(final int value) {
IntUnaryOperator op = new IntUnaryOperator() {
@Override
public int applyAsInt(int operand) {
return operand + value;
}
};
return op;
}
};
问题内容: 我之前阅读过一些Java 8教程。 现在,我遇到以下主题: Java是否支持Currying? 在这里,我看到以下代码: 我了解此示例包含2个元素,但无法理解其构造: 根据表达式的左侧,该行应实现以下功能: 在此之前,我只遇到一个箭头就遇到了lambda。 问题答案: 如果将其表示为非速记lambda语法或pre-lambda Java匿名类语法,则更清楚发生了什么… 原来的问题。为什
问题内容: 我正在尝试运行一些Android测试,但是,编译器抱怨存在多个dex文件。 所以我试图过滤重复的依赖项: 但是我得到以下输出: 我对箭头(->)的含义感到困惑。他们的意思是什么? 问题答案: 这意味着,依赖图包含相同的多个依赖和而不同的版本如。Gradle尝试自动解决冲突的版本- 默认情况下,选择最新版本。左侧是请求的版本,右侧是将要选择的版本。在这里可以找到类似的问题。
我正在阅读ScrollListView的源代码,在一些地方我看到了的用法。 88号线。 这是的缩写吗?如果有什么不同,又是怎么回事?
请参见CodeSandBox中的完整代码。
我正在尝试运行一些Android测试,然而,编译器抱怨多个dex文件存在。 因此,我正在尝试筛选重复的依赖项: 然而,我得到以下输出: 我不明白箭头(->)的意思。他们是什么意思?
我知道<代码> 代码如下: