Сравните два целочисленных массива, используя Java Stream - PullRequest
0 голосов
/ 13 октября 2018

У меня есть два целочисленных массива, например, -

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

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

Я хочу сравнить его поэлементно, т.е. 2 с 4затем 7 до 2 и, наконец, 9 до 8.Каждый результат сравнения будет сохранен в списке.

Это довольно легко сделать традиционными способами Java.Но я хочу использовать Stream здесь.Есть указатели?

Ответы [ 4 ]

0 голосов
/ 13 октября 2018

По сути, вы ищете функциональность операции 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();
0 голосов
/ 13 октября 2018

Предполагая, что длина обоих входных массивов одинакова

List<Integer> list = IntStream.range(0, a.length).mapToObj(i -> Integer.compare(a[i], b[i]))
            .collect(Collectors.toCollection(() -> new ArrayList<>(a.length)));
0 голосов
/ 13 октября 2018

То же, что и другие ответы с разницей в битах

List<Integer> result = IntStream.rangeClosed(0,a.length-1)
            .boxed()
            .map(i->Integer.compare(a[i],b[i]))
            .collect(Collectors.toList());
0 голосов
/ 13 октября 2018

Вы можете сделать это так,

List<Boolean> equalityResult = IntStream.range(0, a.length).mapToObj(i -> a[i] == b[i])
                .collect(Collectors.toList());

Условие: оба массива имеют одинаковый размер.

...