计算数组列表中的项数

时间:2010-09-13 20:36:02

标签: java

我想计算数组中itemid的数量,我可以举例说明如何将其添加到我的代码中。代码如下;

if (value != null && !value.isEmpty()) {
    Set set = value.keySet();
    Object[] key = set.toArray();
    Arrays.sort(key);

    for (int i = 0; i < key.length; i++) {
        ArrayList list = (ArrayList) value.get((String) key[i]);

        if (list != null && !list.isEmpty()) {
            Iterator iter = list.iterator();
            double itemValue = 0;
            String itemId = "";

            while (iter.hasNext()) {
                Propertyunbuf p = (Propertyunbuf) iter.next();
                if (p != null) {
                    itemValue = itemValue + p.getItemValue().doubleValue();
                    itemId = p.getItemId();
                }

                buf2.append(NL);
                buf2.append("                  " + itemId);

            }

            double amount = itemValue;
            totalAmount += amount;
        }
    }
}

6 个答案:

答案 0 :(得分:125)

列表中itemId的数量与列表中的元素数量相同:

int itemCount = list.size();

但是,如果您想要计算唯一itemIds的数量(每@pst),那么您应该使用一个集合来跟踪它们。

Set<String> itemIds = new HashSet<String>();

//...
itemId = p.getItemId();
itemIds.add(itemId);

//... later ...
int uniqueItemIdCount = itemIds.size();

答案 1 :(得分:12)

您想要计算数组中的itemid数。只需使用:

int counter=list.size();

更少的代码可以提高效率。不要跑祖先的车轮......

答案 2 :(得分:2)

在你的循环之外创建一个int:

int numberOfItemIds = 0;
for (int i = 0; i < key.length; i++) {

然后在循环中增加它:

itemId = p.getItemId();
numberOfItemIds++;

答案 3 :(得分:1)

使用Java 8流API:

 String[] keys = new String[0];

// A map for keys and their count
Map<String, Long> keyCountMap = Arrays.stream(keys).
collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
int uniqueItemIdCount= keyCountMap.size();

答案 4 :(得分:0)

我唯一要添加到Mark Peters解决方案的是你不需要迭代ArrayList - 你应该可以在Set上使用addAll(Collection)方法。您只需遍历整个列表即可进行求和。

答案 5 :(得分:0)

您可以通过调用list.size()来获得列表中元素的数量,但是某些元素可能是重复的或null(如果列表实现允许null)。

如果您想要数量独特的商品,并且您的商品正确实现了equalshashCode,则可以将它们全部放在一个集合中,并在其上调用size,如下所示:

new HashSet<>(list).size()

如果您想要具有不同itemId的项目数量,可以执行以下操作:

list.stream().map(i -> i.itemId).distinct().count()

假设itemId的类型正确实现了equalshashCode(问题中的String可以实现map(i -> i.itemId.toLowerCase()),除非您要执行诸如忽略大小写之类的操作,否则如果可以的话,你可以null)。

您可能需要处理map元素,方法是在调用filter(Objects::nonNull)map之前对它们进行过滤,或者在map(i -> i == null ? null : i.itemId)调用中为它们提供默认的itemId: {{1}}。