- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试 transform()
一个Dataset
在 Java 中如下所示:
Function1<Dataset<Long>,Dataset<Long>> withDoubled = (Dataset<Long> numbers) -> numbers.withColumn("doubled",numbers.col("id").multiply(2));
spark.range(10).transform(withDoubled).show();
然而,Function1<>
被标记为错误,表示有多个抽象函数要覆盖。我如何将其写成 lambda?
最佳答案
将 lambda 与 Scala 的 Function1
结合使用并不是直截了当的,因为 lambda 与 Interface
的结合只有一个抽象
未实现的函数这在 Scala 的 Function1
特征的情况下是不正确的。
我们可以使用变通方法,
首先让我们定义构建器,使工作可重用,
Function1
的生成器,
package lambdascala;
import scala.Function1;
public class Function1WithLambdaBuilder<P1, R> {
public static interface Function1LambdaApply<P1, R> {
R apply(P1 p1);
}
private Function1LambdaApply<P1, R> lambda;
private Function1<P1, R> function;
public Function1WithLambdaBuilder(Function1LambdaApply<P1, R> lambda) {
this.lambda = lambda;
this.function = new Function1<P1, R> () {
@Override
public R apply(P1 p1) {
return Function1WithLambdaBuilder.this.lambda.apply(p1);
}
};
}
public Function1<P1, R> getFunction() {
return this.function;
}
}
Function2
的另一个构建器
package lambdascala;
import scala.Function2;
public class Function2WithLambdaBuilder<P1, P2, R> {
public static interface Function2LambdaApply<P1, P2, R> {
R apply(P1 p1, P2 p2);
}
private Function2LambdaApply<P1, P2, R> lambda;
private Function2<P1, P2, R> function;
public Function2WithLambdaBuilder(Function2LambdaApply<P1, P2, R> lambda) {
this.lambda = lambda;
this.function = new Function2<P1,P2, R> () {
@Override
public R apply(P1 p1, P2 p2) {
return Function2WithLambdaBuilder.this.lambda.apply(p1, p2);
}
};
}
public Function2<P1, P2, R> getFunction() {
return this.function;
}
}
您可以按照相同的模式为更多 FunctionN
添加构建器。
现在我们可以使用这些构建器构建Function1
和Function2
import lambdascala.Function1WithLambdaBuilder;
import lambdascala.Function2WithLambdaBuilder;
import scala.Function1;
import scala.Function2;
import java.util.List;
public class LambdaTry {
public static void main() {
Function1<List<Long>, List<Long>> changeNothing =
new Function1WithLambdaBuilder<List<Long>, List<Long>>(
// your lambda
(List<Long> list) -> list
).getFunction();
Function1<Integer, Integer> add2 =
new Function1WithLambdaBuilder<Integer, Integer>(
// your lambda
(Integer i) -> i + 2
).getFunction();
Function2<Integer, Integer, Integer> add =
new Function2WithLambdaBuilder<Integer, Integer, Integer>(
// your lambda
(Integer i, Integer j) -> i + j
).getFunction();
System.out.println(add2.apply(12));
System.out.println(add.apply(12, 24));
}
}
关于java - 将 scala.Function1 写成 lambda 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773306/
在 Erlang 中,使用 =>要比较两个变量会导致语法错误,您必须使用 >=反而: 1> 10 => 5. * 1: syntax error before: '>' 2> 10 >= 5. tru
在少数情况下,日期写为“created ca.”。 1858-60',人类读者会将其理解为“约 1858-1860 年创建”。 因此,想象两个代表年的整数。 a = 1858 b = 60 我希望能够
是否可以用经典的 asp 写出我得到的带有字母的输出整数? 例如,如果我的结果是 5,我想输出“五” 或者如果是二十,我需要它显示“二十” 结果可能是无限的,因此编写一个用于查找目的的数组是行不通的。
这就是我正在做的,我读取了一个 .mp3 文件,以这种方式将其转换为 Base64String: using (fileStream) {
是否有任何算法可以找出有多少种方法可以写出一个数字,例如 n ,其总和为 2 ? 例如:对于 4 有四种方法: 4 = 4 4 = 2 + 2 4 = 1 + 1 + 1 + 1 4 = 2 + 1
我正在尝试 transform()一个Dataset在 Java 中如下所示: Function1,Dataset> withDoubled = (Dataset numbers) -> number
这个问题在这里已经有了答案: Convert integer to hexadecimal and back again (11 个答案) 关闭 7 年前。 在 c# 中,我将错误代码定义为 pub
如何使用 Flink 将 DataSet 作为 Parquet 文件写入 s3 bucket。是否有像 spark 这样的直接函数:DF.write.parquet("write in parquet
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 3 年前。 Improve
在CLRS中,作者通过以下伪代码介绍了红黑树中的旋转操作: LEFT-ROTATE(T, x) y = x.right # Line 1 x.right = y.left
我是一名优秀的程序员,十分优秀!