使用lambda表达式更新嵌套列表:Java 8
我想使用streams api更新另一个列表中的对象列表
我有一个List<User> users
,它有List<Filter> filters
。我想用Filter对象作为参数来更新匹配userID和相应filterName的元素。地图不允许我这样做
我尝试了下面的操作,但map似乎不允许映射多个元素
public void update(String userID, Filter filter) {
users.stream()
.filter(element -> element.getUserId().equals(userID)
&& element.getFilters().stream().filter(f -> f.getName().equals(filter.getName())).findAny().isPresent())
.forEach(x -> {
x.getFilters().stream().map(s -> {
s.setCreatedOn(filter.getCreatedOn());
s.setDescription(filter.getDescription());
s.setEnabled(filter.isEnabled());
s.setFilterValue(filter.getFilterValue());
s.setReadOnly(filter.isReadOnly());
s.setModifiedOn(filter.getModifiedOn());
s.setName(filter.getName());
s.setType(filter.getType());
s.setValid(filter.isValid());
s.setEncrypted(filter.isEncrypted());
});
});
}
可以使用什么方法更新内部List<Filter>
# 1 楼答案
如果在
x.getFilters().stream().map(
中用forEach
替换map
,您的原始代码可以工作,但我建议使用更好的替代方法生成所有应更新的
Stream<Filter>
的平面Filter
,然后对其运行更新: