gpt4 book ai didi

java - 使用 lambda 表达式更新嵌套列表 : Java 8

转载 作者:搜寻专家 更新时间:2023-10-31 19:59:52 32 4
gpt4 key购买 nike

我想使用流 API 更新另一个列表中的对象列表。

我有一个 List<User> users其中有 List<Filter> filters .我想更新与 userID 和相应的 filterName 匹配的元素,并将 Filter 对象作为参数传入。 map 不允许我这样做。

我尝试执行以下操作,但 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>

最佳答案

如果替换 map,您的原始代码可以工作与 forEachx.getFilters().stream().map( , 但我建议一个更好的选择。

生成平面 Stream<Filter>所有的 Filter s 应该更新,然后对它们运行更新:

public void update(String userID, Filter filter) {
users.stream()
.filter(element -> element.getUserId().equals(userID)) // get relevant user[s]
.flatMap(element -> element.getFilters().stream()) // get all filters of relevant
// user[s]
.filter(f -> f.getName().equals(filter.getName())) // keep only relevant filters
.forEach (f -> { // run your update on all the relevant filters
f.setCreatedOn(filter.getCreatedOn());
f.setDescription(filter.getDescription());
f.setEnabled(filter.isEnabled());
f.setFilterValue(filter.getFilterValue());
f.setReadOnly(filter.isReadOnly());
f.setModifiedOn(filter.getModifiedOn());
// f.setName(filter.getName()); can be removed, as commented by markusk
f.setType(filter.getType());
f.setValid(filter.isValid());
f.setEncrypted(filter.isEncrypted());
});
}

关于java - 使用 lambda 表达式更新嵌套列表 : Java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47153287/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com