java - 如何计算 ArrayList 中对象的数量?
问题描述
我在我的 TabLayout 中设置了一个 RecyclerView,对于每个选项卡,我只是从 RecyclerView 的列表中过滤掉项目,并且对于每个选项卡,用户可以从 RecyclerView 中选择 X 个项目,一旦达到该限制,TabLayout 将设置为下一个标签。
我的 RecyclerView 基于ArrayList<ItemPTERM>
其中 ItemPTERM 是一个对象,其中description
包含quantity
.
一旦从 中选择了一个新项目RecyclerView
或者它的数量增加了,我必须检查项目限制是否仍然有效,否则我必须跳到下一个选项卡。
所以我做了以下功能来检查我的Adapter
:
private boolean isQuantityValid() {
int quantity = 0;
for (final ItemPTERM item : piattiItems) {
if (quantity > limit) {
return false;
}
quantity += (int) item.getQuant();
}
return true;
}
然后在我的PlusMinusAdd
函数中调用它。这是计算添加项目数量的最佳方法吗?
解决方案
另一种计算项目总数量的方法是stream
,map
和reduce
。
示例如何使用这些计算总量:
int quantity = piattiItems.stream()
.map(item -> (int) item.getQuant())
.reduce(0, (q, i) -> q+i);
您的方法可能如下所示:
private boolean isQuantityValid() {
int quantity = piattiItems.stream()
.map(item -> (int) item.getQuant())
.reduce(0, (q, i) -> q + i);
return quantity > limit ? false : true;
}
如果你想过滤一些对象(例如null
),你可以像这样向流中添加一个过滤器:
int quantity = piattiItems.stream()
.filter(item -> item != null)
.map(item -> (int) item.getQuant())
.reduce(0, (q, i) -> q+i);
这样,该方法变得更加紧凑并且(在我看来)更易于阅读。
推荐阅读
- python - 如何根据另一个列表中的元素修改一个列表中的元素?
- react-native - 相邻的视图
- javascript - 加载 style.css 时出现 error_404
- gmail - 通过 Chrome 和 Firefox 在 Gmail 中访问时,HTML 电子邮件的显示方式有所不同。我该如何防止这种情况?
- python - 在编写 csv 时拟合两个参数
- java - Intellij 在运行仪表板中运行多个应用程序时显示端口号
- avfoundation - 使 CIContext.render(CIImage, CVPixelBuffer) 与 AVAssetWriter 一起工作
- firebase - Firebase .index关于它是如何工作的?
- html - 谷歌应用脚本中的彩色按钮
- javascript - 如何让警报框和验证在此代码上工作