Java8嵌套流使用setter回写

时间:2015-06-16 18:56:37

标签: java java-8 java-stream

我试图遍历两个列表,过滤嵌套列表并使用java8功能将结果写回主对象。

locations.forEach(location -> location.getSubList().stream()
            .filter(this::correctTestDataValue)
            .collect(Collectors.toList()));

所以现在位置内的子列表没有改变,这是 很明显因为stream和collect确实创建了一个新的列表 不会写回位置对象。 所以我的问题是,如果有办法调用setSubList(...)方法 位置对象并将新列表写入其中。

THX

1 个答案:

答案 0 :(得分:5)

我会使用for循环:

for (Location location : locations) {
  List<?> newList = location.getSubList().stream()
                                         .filter(this::correctTestDataValue)
                                         .collect(Collectors.toList());
  location.setSubList(newList);
}

或者如果你可以移除:

for (Location location : locations) {
  location.getSubList().removeIf(x -> !correctTestDataValue(x));
}

哪个可以作为流:

locations.stream()
    .map(Location::getSublist)
    .forEach(list -> list.removeIf(x -> !correctTestDataValue(x)));