Java 使用lambda表达式计算数组中的差异
我试着做以下的事情:如果我有一个数组,其中包含数字Java 使用lambda表达式计算数组中的差异,java,arrays,lambda,Java,Arrays,Lambda,我试着做以下的事情:如果我有一个数组,其中包含数字 {1,4,9,16,25,36,49,64,81,100} 我想递归地计算两个后续元素之间的差异。所以首先在元素1和0之间,然后是2和1,以此类推 一旦有了这些差异,我想计算该数组中任意两个后续元素之间的差异 所以如果你从 {1,4,9,16,25,36,49,64,81,100} 你去 {3,5,7,9,11,13,15,17,19} 然后去 {2,2,2,2,2,2,2,2} 我知道如何编程,但只使用Java7样式,而不使用Java
{1,4,9,16,25,36,49,64,81,100}
我想递归地计算两个后续元素之间的差异。所以首先在元素1
和0
之间,然后是2和1,以此类推
一旦有了这些差异,我想计算该数组中任意两个后续元素之间的差异
所以如果你从
{1,4,9,16,25,36,49,64,81,100}
你去
{3,5,7,9,11,13,15,17,19}
然后去
{2,2,2,2,2,2,2,2}
我知道如何编程,但只使用Java7样式,而不使用Java8Lambda表达式样式。这是我的尝试:
Integer[] numbers = new Integer[] {1,4,9,16,25,36,49,64,81,100};
for (int i=0;i<3;i++)
{
int length = numbers.length;
numbers = IntStream.range(1, length)
.mapToObj(a->numbers[a]-numbers[a-1])
.toArray(b->new Integer[length-1]);
}
Integer[]number=新整数[]{1,4,9,16,25,36,49,64,81100};
对于(整数i=0;整数[a]-数[a-1])
.toArray(b->新整数[length-1]);
}
这不起作用,因为Java在使用lambda表达式时要求数组号是最终的,但是我不能在同一数组上递归调用相同的代码。如何解决此问题?如何制作一个为您执行此操作的UnaryOperator
,然后您可以传入数组并使用它来计算新数组,同时保持lambda中使用的变量是有效的最终变量:
int numbers[] = new int[] {1, 4, 9, 16, 25, 36, 49, 64, 81, 100};
UnaryOperator<Integer[]> differenceFunc = ns -> IntStream.range(1, ns.length)
.map(i -> ns[i] - ns[i - 1])
.toArray();
for (int x = 0; x < 3; ++x) {
numbers = difference.apply(numbers);
}
int number[]=新的int[]{1,4,9,16,25,36,49,64,81,100};
一元运算符differenceFunc=ns->IntStream.range(1,ns.length)
.map(i->ns[i]-ns[i-1])
.toArray();
对于(int x=0;x<3;++x){
数字=差异。应用(数字);
}
您可以使用流。迭代
,从中应用“减量”函数。您可以跳过前x个元素以获得所需的数组(这可能不是最佳的方法),或者您可以将其限制为x次调用并将数组收集到列表中,例如:
int[] numbers = {1,4,9,16,25,36,49,64,81,100};
Optional<int[]> opt =
Stream.iterate(numbers, arr -> IntStream.range(1, arr.length)
.map(i -> arr[i] - arr[i-1])
.toArray())
.skip(2)
.findFirst();
opt.ifPresent(a -> System.out.println(Arrays.toString(a)));
skip 0 => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
skip 1 => [3, 5, 7, 9, 11, 13, 15, 17, 19]
skip 2 => [2, 2, 2, 2, 2, 2, 2, 2]
skip 3 => [0, 0, 0, 0, 0, 0, 0]
看看