Сравните два списка с Java -8 - PullRequest
0 голосов
/ 25 мая 2020

Я хочу сравнить два списка (eastList и westList). EastList будет содержать значение 0, а westList будет содержать значение 1. Возвращаемое значение должно быть 5. Код работает верно. Могу ли я записать вторую для l oop с потоками? Как можно написать этот код с функциями Java 8 для эффективного кода? Пожалуйста помоги. Спасибо ...

import java.util.*;

public class Solution {

public int solution(int[] A) {
    List<Integer> eastList = new ArrayList<>();
    List<Integer> westList = new ArrayList<>();
    int count = 0;

    for(int i = 0; i < A.length; i++) {
        if(A[i] == 0) {
            eastList.add(i);
        }
        else {
            westList.add(i);
        }
    }

    for(int m = 0; m < eastList.size(); m++) {
        for(int n = 0; n < westList.size(); n++) {
            if(eastList.get(m) < westList.get(n)) {
                count++;
            }
        }
    }
    return count;
}

public static void main(String[] args) {
    Solution solution = new Solution();
    int[] A = {0,1,0,1,1};    
    solution.solution(A);
}
}

1 Ответ

0 голосов
/ 26 мая 2020

Для Java9 и выше вы можете использовать dropWhile

eastList.stream().map(
  east -> westList.stream().dropWhile(west -> west <= east).count()
).sum()

И (на мой взгляд) потоковый код более выразителен, потому что вызовы dropWhile и count точно описывают то, что мы делаем. с east и westList

ОБНОВЛЕНИЕ: исправлено в соответствии с комментарием Рахула

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...