使用Java Stream比较两个整数数组

时间:2018-10-13 04:40:33

标签: arrays java-8 java-stream

我有两个整数数组,例如-

int[] a = {2, 7, 9}

int[] b = {4, 2, 8}

我想逐个元素地进行比较,即24,然后72,最后98。每个比较结果将存储在列表中。

以传统的Java方式很容易做到。但是我想在这里使用Stream。有指针吗?

4 个答案:

答案 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();