Отфильтруйте элемент один за другим, используя filter () - PullRequest
2 голосов
/ 22 мая 2019

Я начну с моего вопроса:

У меня есть массив:

int[] arr = { 1,2,3,4,5 };, я хочу сохранить значения в List<Integer> li, например: 14,13,12,11,10

Как эти значения попали в Список li следующим образом ??

Наши начальные числа: 1,2, 3, 4 и 5 ,Мы можем вычислить следующие суммы, используя четыре из пяти целых чисел:

  • Если мы сложим все, кроме 1, наша сумма будет равна 14.
  • Если мы сложим все, кроме 2, наша сумма будет13.
  • Если мы сложим все, кроме 3, наша сумма будет 12.
  • Если мы сложим все, кроме 4, наша сумма будет равна 11.
  • Если мы сложим все, кроме 5наша сумма равна 10.

Мой подход и мысли:

Я думал, что у меня уже есть int [] arr, поэтому я сделаю это для потоковой передачи, теперь я буду filterкаждый элемент один за другим и sum будет отдыхать в каждой итерации и добавит это в список li.

List<Integer> li   = IntStream.range(0,1).filter(i-> arr[i] !=i).sum();

^^ Это не сработало, я думаю, я могу сделать некоторые это какниже?

IntStream.range(0,1).filter(i-> filter(this is anotherfilter)).sum();

Я не могу этого понять, я хочу решить эту проблему с потоками и Java-8.

Ответы [ 3 ]

4 голосов
/ 22 мая 2019

Вы можете разбить его на два этапа и выполнить операцию как:

int[] arr = { 1,2,3,4,5 };
int total = Arrays.stream(arr).sum(); // total of the array
List<Integer> output = Arrays.stream(arr)
        .mapToObj(integer -> total - integer) // (total - current) value as element
        .collect(Collectors.toList());
1 голос
/ 22 мая 2019
IntStream.range(0, arr.length)
             .map(x -> IntStream.of(arr).sum() - arr[x])
             .forEachOrdered(System.out::println);

Или IntStream.of(arr).sum() можно вычислить только один раз как одну переменную.

0 голосов
/ 22 мая 2019
    Supplier<IntStream> supplier = () -> IntStream.range(1, 6);
    supplier.get()
             .map(integer -> supplier.get().sum() - integer)
             .forEach(item -> System.out.println(item));

Вместо forEach вы можете использовать collect (Collectors.toList ()) для сбора целых чисел в списке

...