我有两个整数数组,例如-
int[] a = {2, 7, 9}
int[] b = {4, 2, 8}
我想逐个元素地进行比较,即2
与4
,然后7
与2
,最后9
与8
。每个比较结果将存储在列表中。
以传统的Java方式很容易做到。但是我想在这里使用Stream。有指针吗?
答案 0 :(得分:4)
您可以这样做
List<Boolean> equalityResult = IntStream.range(0, a.length).mapToObj(i -> a[i] == b[i])
.collect(Collectors.toList());
前提条件:两个数组的大小相同。
答案 1 :(得分:3)
假设两个输入数组的长度相同
List<Integer> list = IntStream.range(0, a.length).mapToObj(i -> Integer.compare(a[i], b[i]))
.collect(Collectors.toCollection(() -> new ArrayList<>(a.length)));
答案 2 :(得分:2)
与其他答案相同,只是有所不同
List<Integer> result = IntStream.rangeClosed(0,a.length-1)
.boxed()
.map(i->Integer.compare(a[i],b[i]))
.collect(Collectors.toList());
答案 3 :(得分:1)
您实质上是在寻找Zip
操作的功能(Java尚不可用)。
因此,为了获得一组布尔值,我建议:
boolean[] accumulator = new boolean[a.length];
IntStream.range(0, a.length)
.forEachOrdered(i -> accumulator[i] = a[i] == b[i]);
并分别将结果作为两个数组中相应元素之间的int
:
int[] ints = IntStream.range(0, a.length)
.map(i -> Integer.compare(a[i], b[i]))
.toArray();