我们可以在Java8中的两个不同Stream上执行比较操作吗?

时间:2019-07-27 11:07:12

标签: java java-8 java-stream

我有两个Integer数组流,我想检查第一个流的所有元素是否都小于第二个。像Python元组一样,我们可以比较具有相同索引的两个不同元组的元素。

if (ry, rm, rd) <= (ey, em, ed):
print(0)

例如,在这里,我们可以使用一个运算符比较所有元素。我想在Java中实现相同的目标。

我们可以对java流做类似的事情吗?

boolean check(int a1[],int a2[])
{
    boolean flag= true;
    IntStream s1 = Arrays.stream(a1);
    IntStream s2 = Arrays.stream(a2);
    Iterator<Integer> it1 = s1.iterator();
    Iterator<Integer> it2 = s2.iterator();
    while(it1.hasNext() && it2.hasNext())
    {
        if(it1.next() > it2.next())
            flag = false;
    }
    return flag ;
}

还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果数组IntStreamallMatch的长度相同,则使用a1a2。仍然可以给出较小尺寸数组的最大长度,否则将获得相同的预期结果

int[] a2 = { 1, 2, 3 };
int[] a1 = { 0, 1, 2 };

int[] a3 = {0,1};

boolean result = IntStream.range(0, a1.length).allMatch(i -> a1[i] < a2[i]);

// using less than or equal to
boolean result1 = IntStream.range(0, a3.length).allMatch(i -> a3[i] <= a1[i]);

System.out.println(result);    //true

System.out.println(result1);    //true

以同样的方式,您也可以在相反的情况下使用anyMatch,这样就不必在发生故障后遍历整个流

boolean result2 = IntStream.range(0, a1.length).anyMatch(i->a1[i]>a2[i]);

答案 1 :(得分:1)

您可以使用Guava Streams压缩两个流,并在Bi-Function中对其进行比较。请参阅the link for details

Stream<Integer> aStream = Stream.of(0, 2, 3);
        Stream<Integer> bStream = Stream.of(1, 1, 3);

        System.out.println(Streams
                                .zip(aStream, bStream, (i, j) -> i >= j)
                                .allMatch(b -> b)
                        );