匿名类替换为 lambda 表达式
我有使用Java 8新流功能的示例代码(获取int值范围1 .. 20,跳过前9个,然后取剩余的10个,每个int值:减少一乘以2)。
System.out.println(Arrays.toString(
IntStream.rangeClosed(1, 20).skip(9).limit(10).map((new IntUnaryOperator() {
@Override
public int applyAsInt(int operand) {
return operand - 1;
}
}).andThen(new IntUnaryOperator() {
@Override
public int applyAsInt(int operand) {
return operand * 2;
}
})).toArray()));
输出如下:
[18, 20, 22, 24, 26, 28, 30, 32, 34, 36]
现在我想用 Lambda 表达式替换匿名类。以下转换工作正常(第二个匿名类替换为lambda表达式),我得到相同的输出:i -> i * 2
System.out.println(Arrays.toString(
IntStream.rangeClosed(1, 20).skip(9).limit(10).map((new IntUnaryOperator() {
@Override
public int applyAsInt(int operand) {
return operand - 1;
}
}).andThen(i -> i * 2)).toArray()));
但是,当我将第一个匿名类替换为 lambda 表达式时:
System.out.println(
Arrays.toString(
IntStream.rangeClosed(1, 20).skip(9).limit(10)
.map((v -> v - 1).andThen(i -> i * 2)).toArray()));
我无法编译我的代码。错误说Operator '-' cannot be applied to '<lambda parameter>', 'int'
您知道如何将两个 lambda 表达式与 ?IntUnaryOperator.andThen
我知道我可以使用... 这工作正常,但我想找出如何使用lambdas(如果可能的话)。.limit(10).map(v -> v - 1).map(i -> i * 2).toArray() ...
IntUnaryOperator.andThen