【问题标题】:Processing a collection taking two adjacent elements at a time (use of stream)一次处理两个相邻元素的集合(使用流)
【发布时间】:2019-03-28 14:13:27
【问题描述】:

我有一个代表不同城市的对象列表。我想用那个列表做的是获得列表中相邻城市之间距离的总和。所以如果我的列表是l = {c1,c2,c3},结果将是 总计sum = distance(c1,c2) + distance(c2,c3)

我试图使用流 API,但在这种特殊情况下我找不到一种方法来处理列表中的元素,其中处理不是一次一个元素,而是涉及列表的两个相邻元素每一步。

如果有人知道如何以这种方式应用流,我将不胜感激。

【问题讨论】:

  • 您是否为此编写了命令式代码?你被困在哪里了?
  • 我是 Java 新手,我一直在将流应用于列表,但一次只处理一个元素,现在我想使用它,但同时使用两个(一次相邻的元素),我还是没找到办法
  • 双倍总公里=新双倍(0d); for (int i = 0; i
  • 这是我到目前为止的代码,但我想使用流而不是使用 for 进行迭代
  • 这将是对 DoubleStream 的不良使用。您需要使用一个字段来“记住”流中的最后一个值,但 Stream 文档明确建议流操作是无状态的。最好使用常规循环。

标签: java list java-stream fold


【解决方案1】:

你可以用这个:

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

这将创建一个IntStream 并映射计算出的邻近城市的距离。最后将所有距离相加。

【讨论】:

    【解决方案2】:

    试试这个:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-03
      • 2011-02-05
      • 2021-03-03
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      相关资源
      最近更新 更多