我正在尝试使用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);
}
答案 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,则可能会出现问题,因为您不能拥有两个不相关类型的列表。