//我正在寻找使用流的循环,如下所示:
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 -> {
});
});
答案 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