首页 > 解决方案 > 如何计算 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函数中调用它。这是计算添加项目数量的最佳方法吗?

标签: javaandroidandroid-recyclerview

解决方案


另一种计算项目总数量的方法是stream,mapreduce

示例如何使用这些计算总量:

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);

这样,该方法变得更加紧凑并且(在我看来)更易于阅读。


推荐阅读