我需要对列表页面进行处理。因此,我想知道以下两种方式在性能和最佳实践方面哪种更好:
- Original Answer
- 使用jQuery的.hide()方法
public List<Other> function(List<Something> somethingList,
int offset, int pageSize) {
return somethingList.stream().skip(offset * pageSize).limit(pageSize)
.map(s -> doSomething(s)).collect(Collectors.toList());
}
最初的回答
或:
public List<Other> function(List<Something> somethingList,
int offset, int pageSize) {
return somethingList.subList(offset * pageSize, offset * pageSize + pageSize)
.stream().map(s -> doSomething).collect(Collectors.toList());
}
最初的回答:我自愿省略了偏移量和页面大小的验证。
编辑:这并不是性能上的必要需求,我的问题也涉及到清晰度、可维护性和良好实践。我更喜欢流式处理的方式,尤其是因为它需要较少的验证。但我更希望确保这不会导致性能上的真正损失或不易于维护/清理的代码。
stream().skip(offset * pageSize).limit(pageSize)
需要较少的验证,因为超出范围的值将导致一个空的流 - 对于subList(...)
,您需要检查参数是否在列表的边界内。从性能角度来看,我猜subList
对于ArrayList
可能更快,但skip()
对于LinkedList
可能同样快甚至更快。我建议在这里不要关注性能,除非您面临真正的问题。相反,您应该关注其他属性,比如Lino评论的:子列表是由列表支持的视图。 - ThomasList
实现以及边界变量的值。至少对于java.util.ArrayList
,subList
方法是O(1)的。 - khelwood