【问题标题】:How to count number of custom objects in list which have same value for one of its attribute如何计算列表中其属性之一具有相同值的自定义对象的数量
【发布时间】:2015-10-26 19:53:01
【问题描述】:

我正在用 java 编程。假设我有一个自定义对象 Item

class Item
{
     Integer id;
     BigDecimal itemNumber;
}

我有物品清单。

List<Item> items = new ArrayList<>();

现在,在 java 中了解的最佳方法是什么,Items 列表包含一些 ItemsitemNumber 的值相同。

【问题讨论】:

  • 使用循环并使用equals和count匹配对象。

标签: java arraylist collections


【解决方案1】:

使用某个项目编号搜索特定项目

//result list
List<Item> itemsWithSameNumber = new ArrayList<>();

for (Item item : items) {
    if (item.getItemNumber().equals(yourKey)) {
        itemsWithSameNumber.add(item);
    }
}

获取所有项目编号的项目列表:

对于这种情况,您可以使用HashMap

//result map
HashMap<BigDecimal, List<Item>> map = new HashMap<>();

for (Item item : items) {
    List<Item> itemsWithSameNumber = map.get(item.getItemNumber());
    if (itemsWithSameNumber == null) { //does not exist in map yet
        itemsWithSameNumber = new ArrayList<Item>();
        map.put(item.getItemNumber(), itemsWithSameNumber);
    }
    itemsWithSameNumber.add(item); //now add the item to the list for this key
}

稍后,您可以遍历地图的键集并获取每个键的所有项目:

for (BigDecimal key : map.keySet()) {
    List<Item> listOfElementsWithSameKey = map.get(key);
}

【讨论】:

    【解决方案2】:

    您并没有真正说明您的意思 包含一些 ItemitemNumber 的值相同

    • 全部按itemNumber排序?
    • 获取所有匹配itemNumber的元素?

    无论如何,您有几种方法可以实现:

    或者,如果您有参考价值,请使用普通的Java像真正的男人一样

    BigInteger yourValue = // your desired value
    List<Item> result = new ArrayList<Item>();
    for (Item item : items) {
        if (item.itemNumber.equals(yourValue)) {
            item.add(item);
        }
    }
    

    【讨论】:

      【解决方案3】:

      在您的 Item 类中重写 equals 方法,并在项目列表中调用 contains 方法,该方法将调用 Item 的 equal 方法。

       class Item
          {
               Integer id;
               BigDecimal itemNumber;
      
                public boolean equals(Item item) {
                if (this.itemNumber.equals(item.itemNumber)) {
                  return true;
              }
          // getter and setter
      
      }
      

      在列表中检查

      items.contains(项目)

      【讨论】:

        【解决方案4】:

        计算它们:

        List<Item> items = new ArrayList<>();
        int count=0;
        int idToFind=88;
        for(Item i:items){
          if(i.getId()==idToFind)
            count++;
        }
        

        获取另一个列表:

        Item itemToFind;
        List newList=list.contains(itemToFind);
        

        并在您的类中覆盖 equals 以比较小数点后的对象

        【讨论】:

          猜你喜欢
          • 2022-07-03
          • 2020-04-05
          • 2015-06-30
          • 1970-01-01
          • 2015-12-30
          • 2018-06-10
          • 2022-01-20
          • 2013-02-13
          相关资源
          最近更新 更多