使用java中的流

时间:2018-12-11 15:46:18

标签: java foreach java-8 java-stream

我正在尝试使用Java1.8使用help Stream函数将下面的for-loop转换为forEach方法,但是我很困惑并且对此感到困惑。

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

  

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

您不应该将流与forEach一起使用只是为了累积到预定义的列表中,因为这样做会产生副作用(在处理流时应避免使用),而应采用John建议的流方法Kugelman如果您想通过流或使用forEach方法来执行它,也可以通过以下方式完成:

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

答案 2 :(得分:-1)

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

但是,如果类型B不继承自A,则可能会出现问题,因为您不能拥有两个不相关类型的列表。