Обработка коллекции с одновременным использованием двух смежных элементов (использование потока) - PullRequest
1 голос
/ 28 марта 2019

У меня есть список объектов, которые представляют разные города.Что я хочу сделать с этим списком, так это получить сумму расстояния между соседними городами в списке.Поэтому, если мой список равен l = {c1,c2,c3}, результат будет таким: sum = distance(c1,c2) + distance(c2,c3).

. Я пытался использовать потоковый API, но не смог найти способ обработки элементов в списке вэтот конкретный случай, когда обработка не является одним элементом за раз, но включает два смежных элемента списка на каждом шаге.

Я был бы очень признателен, если бы кто-нибудь имел представление о том, как применить поток таким образом, чтобы датьмне руку.

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Вы можете просто использовать это:

double distance = IntStream.range(0, cities.size() - 1)
        .mapToDouble(i -> distance(cities.get(i), cities.get(i + 1)))
        .sum();

Это создает IntStream и отображает рассчитанное расстояние для соседних городов. В конце все расстояния суммируются.

1 голос
/ 28 марта 2019

Попробуйте это:

n = l.size();
Stream.iterate(0, i -> i + 1)
      .limit(n-1)
      .map( i -> distance(l.get(i), l.get(i+1))
      .reduce(0, (totalDistance, currDistance) -> totalDistance + currDistance, (distance1, distance2) -> distance1 + distance2);
...