我有一个雇员名单。每个员工都有一个唯一的标识符id
。我有一个employeeId
,必须检查列表中是否包含代表的员工employeeid
。我可以考虑采用两种方法,其中哪一种更好。有性能差异吗?
1)
if (employees.stream().map(Employee::getId).collect(Collectors.toList()).contains(employeeId)) {
// do something
}
2)
boolean employeeIsInsideTheList = false;
for (Employee employee : employees) {
if (employee.getId() == employeeId) {
employeeIsInsideTheList = true;
}
}
if(employeeIsInsideTheList) {
// do something
}
您的Stream
版本Stream
无法达到s 的目的,因为它没有利用延迟评估和短路的优势。您要进行两次完整的迭代-第一次将List
Employees转换List
为ID的形式,第二次在ID的形式中搜索特定List
ID(通过contains()
方法)。
更好的解决方案是在不构建ID的情况下搜索匹配List
的ID:
if (employees.stream().anyMatch(e -> e.getId().equals(employeeId)))) {
// do something
}
您的for
循环溶液可以通过一次匹配标识符被发现循环的爆发可以类似地得到改善。
改进后,如果性能List
相对较小,则是否存在性能差异是没有意义的。我希望使用Stream
s版本,该版本更短并且可读性更好。
如果List
很大,而性能是一个问题,建议您对两种解决方案的性能进行衡量,以找出哪种解决方案更快。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句