Java 8 Loop:坚持使用2nd for循环初始化变量

时间:2018-02-09 03:11:32

标签: java

//我正在寻找使用流的循环,如下所示:

int inputArray[] = {4, 6, 5, -10, 8, 1, 2};

    for (int i : inputArray)
            {
                for (int j = i+1; j < inputArray.length; j++)
                {
                    if(inputArray[i]+inputArray[j] == inputNumber)}}

//尝试了类似但不起作用的东西

IntStream intStream1 =  Arrays.stream(inputArray);

    intStream1.forEach(i -> {
            IntStream.range(i+1,... ).forEach(j -> {

            });
        });

2 个答案:

答案 0 :(得分:2)

在表达式中

遍历数组的值,因此对于

for (int i: inputArray)

i 的值将是:4, 6, 5, -10, 8, 1, 2顺序。

根据代码的样式判断,您需要

for (int i = 0; i < inputArray.length; i++) 

或类似。

与溪流相同的故事。如果从整数数组中创建基本流,foreach将迭代其值,而不是索引。因此,您需要自己考虑索引。这是一个可能的实现。

private static int i = 0, j= 0;
IntStream iStream = Arrays.stream(inputArray);

iStream.forEachOrdered(ival -> {
    j = i+1;
    if (j < inputArray.length) {
        IntStream jStream = Arrays.stream(inputArray, j, inputArray.length);      
        jStream.forEachOrdered(jval -> {
            System.out.println(i + "+" + j + ": " + (ival  + jval));
            j++;
        });
    }
    i++;
});

我相信以上内容可以解释流的主要思想。

您还可以使用IntStram.range()自行迭代索引,或使用其他可能的流式解决方案。请参阅此主题中的其他答案。

答案 1 :(得分:0)

以下是您要求的流回答(找出数组中的任何两个数字是否与给定值相加)

int inputArray[] = {4, 6, 5, -10, 8, 1, 2};
int inputNumber = -8;

IntStream.range(0, inputArray.length-1).forEach(i -> IntStream.range(i+1, inputArray.length)
    .forEach(j -> {
        if (inputArray[i]+inputArray[j] == inputNumber) 
            System.out.println("Found "+inputNumber+"; a["+i+"]="+inputArray[i]+" a["+j+"]="+inputArray[j]);
        }));;

产生结果:

Found -8; a[3]=-10 a[6]=2