Как выполнить арифметическую операцию в foreach Java 8 - PullRequest
0 голосов
/ 20 октября 2019

Я новичок в Java 8, и я попытался написать приведенный ниже фрагмент кода в Java 8, но все же сработало.

static int getMissingNo(int a[], int n) { 
    int i, total; 
    total = (n + 1) * (n + 2) / 2; 
    for (i = 0; i < n; i++) 
        total -= a[i]; 
    return total;
} 

// this is waht i tried in java 8
int  total = (n+1) * (n+2) /2;
unicArray.stream().forEach(e->{
    total  = total - e;
});

Фрагмент кода дает мне ошибку компиляции, говоря, что локальная переменная должна быть окончательной, но есликонечно, как я могу вернуть это значение обратно

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Пожалуйста, найдите код ниже:

static List<Integer> getMissingNo(int[] a, int n) {

        List<Integer> listOfDistinctElements = Arrays.stream(a)
                .boxed()
                .distinct().collect(Collectors.toList());

        List<Integer> elemntsLeftOut = new ArrayList<>();

        IntStream.range(1, listOfDistinctElements.get(listOfDistinctElements.size()-1)).forEach(index ->
                        {
                            if(!listOfDistinctElements.contains(index)){
                                 elemntsLeftOut.add(index);
                        }
                    });

        return elemntsLeftOut;
        }
0 голосов
/ 20 октября 2019

Вы можете просто вернуть разницу между total и sum массива как:

int expectedSum = (n + 1) * (n + 2) / 2;
int actualSum = Arrays.stream(a).sum();  // .distinct().sum() for sum of unique numbers
return expectedSum - actualSum;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...