在java中使用Stream从forEach返回列表

sat*_*nan 0 java foreach java-8 java-stream

我试图使用 Java1.8 使用 help Stream 函数将下面的 for 循环转换为 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);
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 5

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

List<C> value = getResponses().stream()
    .flatMap(r -> getValues(r).stream())
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)