我试图遍历两个列表,过滤嵌套列表并使用java8功能将结果写回主对象。
locations.forEach(location -> location.getSubList().stream()
.filter(this::correctTestDataValue)
.collect(Collectors.toList()));
所以现在位置内的子列表没有改变,这是 很明显因为stream和collect确实创建了一个新的列表 不会写回位置对象。 所以我的问题是,如果有办法调用setSubList(...)方法 位置对象并将新列表写入其中。
THX
答案 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)));