【问题标题】:Return List from forEach using Stream in java在java中使用Stream从forEach返回列表
【发布时间】:2018-12-11 15:46:18
【问题描述】:

我正在尝试使用 Java1.8 将下面的 for-loop 转换为 forEach 方法,并使用帮助 Stream 函数,但我搞砸了,也很困惑。

List<A> valueList = new ArrayList<>();
List<B> responseList = getResponses();
List<A> value = new ArrayList<>();

for (B getResponse: responseList) {
    valueList = getValues(getResponse);
    value.addAll(valueList);
}

【问题讨论】:

    标签: java foreach java-8 java-stream


    【解决方案1】:

    对于流,您通常希望避免创建空列表然后添加项目。 Streams 应该使用函数式惯用语,并尽可能避免副作用。最好将流作为一个整体处理,然后将结果“收集”到最后的列表中。

    List<C> value = getResponses().stream()
        .flatMap(r -> getValues(r).stream())
        .collect(Collectors.toList());
    

    【讨论】:

      【解决方案2】:

      我正在尝试在帮助下将下面的 for 循环转换为 forEach 方法 使用 Java 1.8 的流函数。

      您不应该将流与forEach 一起使用,因为这会产生副作用(在处理流时应避免),而应使用 John Kugelman 建议的流方法,如果您想使用流或使用forEach 方法执行它,也可以这样做:

      List<A> value = new ArrayList<>();
      responseList.forEach(response -> value.addAll(getValues(response))));
      

      【讨论】:

        【解决方案3】:

        您似乎正在尝试将responseList 中的所有值添加到valueList,我认为您可以只执行valueList.addAll(responseList); 而根本不必使用for 循环。

        如果类型 B 不从 A 继承,你可能会遇到问题,因为你不能有两个不相关类型的列表。

        【讨论】:

          猜你喜欢
          • 2015-12-13
          • 1970-01-01
          • 2021-03-26
          • 2019-05-08
          • 2014-06-17
          • 1970-01-01
          • 1970-01-01
          • 2020-06-20
          • 2017-09-26
          相关资源
          最近更新 更多