我有一个用例,其中包含'Location'对象的列表需要基于locationName进行处理。 我尝试使用Java 8流,
private List<Payment> filterLocationsByName(List<Location> locationList) {
return locationList.stream().filter(l -> l.getLocationName()
.equalsIgnoreCase("some_location_name"))
.collect(Collectors.toList());
}
List<Location> originalLocationList = .....
List<Location> someLocations = filterLocationsByName(originalLocationList);
//logic to process someLocations list
// do the same for another locationName
//at the end need to return the originalList with the changes made
我的问题是someLocations列表没有原始列表支持。我为someLocations元素所做的更改未填充在原始列表中。 如何将此someLocations列表合并回原始列表,以便处理后的更改在原始列表中生效?
答案 0 :(得分:1)
Streams主要用于不可变处理,因此通常不会更改原始流源(集合)。您可以尝试使用forEach
,但您需要自行删除。
另一种选择是使用Collection接口中的removeIf
(你只需要否定条件):
locationList.removeIf(
l -> !l.getLocationName().equalsIgnoreCase("some_location_name")
);
这将更改列表。