Java Streams将列表拆分为子列表,单独处理这些列表并将其合并回来

时间:2017-02-19 04:06:06

标签: java collections lambda java-8 java-stream

我有一个用例,其中包含'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列表合并回原始列表,以便处理后的更改在原始列表中生效?

1 个答案:

答案 0 :(得分:1)

Streams主要用于不可变处理,因此通常不会更改原始流源(集合)。您可以尝试使用forEach,但您需要自行删除。

另一种选择是使用Collection接口中的removeIf(你只需要否定条件):

locationList.removeIf(
    l -> !l.getLocationName().equalsIgnoreCase("some_location_name")
);

这将更改列表。