为了账号安全,请及时绑定邮箱和手机立即绑定

Java8中可以对两个不同的Streams进行比较操作吗?

Java8中可以对两个不同的Streams进行比较操作吗?

ITMISS 2023-04-26 14:17:32
我有两个 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 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

通过使用IntStreamandallMatch如果两个数组a1和a2的长度相同。如果你会得到相同的预期结果,你仍然可以给出较小尺寸数组的最大长度


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]);


查看完整回答
反对 回复 2023-04-26
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

您可以使用 Guava Streams 压缩两个流并在 Bi-Function 中比较它们。

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)

                        );


查看完整回答
反对 回复 2023-04-26
  • 2 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信