我有两个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 ;
}
还有更好的方法吗?
答案 0 :(得分:1)
如果数组IntStream
和allMatch
的长度相同,则使用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]);
答案 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)
);