我有一张
List<User> userList = ...
List<Long> UserIdWithBilling = .....
如果在userList id字段中找到UserIdWithBilling列表中的值,我会搜索以将User字段设置为true
for(Long userId : UserIdWithBilling){
Optional<User> optUserList = userList.stream()
.filter(ul->ul.getUserId().longValue()==userId)
.findFirst();
if(optUserList.isPresent()){
optUserList.get().setBilling(true);
}
}
那是可行,但有没有更干净、更快的方法
也许有一种方法可以通过一条线完成
3条答案
按热度按时间pvabu6sv1#
将
UserIdWithBilling
转换为集合,然后在filter
中使用contains
。q0qdq0h22#
下面是使用新旧解决方案的可执行测试(作为一行程序)
对于大型列表,您可以使用parallel streams,但请阅读相关文档。
tp5buhyn3#
在一行上,但请记住,它将原始
userList
上的计费更改为true。如果您想要像您的问题中那样的新列表,您必须重写。