Подтвердить что ты не робот

Подсчитайте количество элементов в списке массивов

Я хочу подсчитать количество элементов в моем массиве, могу ли я получить пример того, как я хотел бы добавить это в свой код. код ниже;

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;
        }
    }
}
4b9b3361

Ответ 1

Число itemId в вашем списке будет таким же, как количество элементов в вашем списке:

int itemCount = list.size();

Однако, если вы хотите подсчитать количество уникальных itemIds (per @pst), вы должны использовать набор, чтобы отслеживать их.

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

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

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

Ответ 2

Вы хотите посчитать количество itemids в вашем массиве. Просто используйте:

int counter=list.size();

Меньше кода повышает эффективность. Не изобретай велосипед...

Ответ 3

Вне вашего цикла создайте int:

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

Затем в цикле добавьте его:

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

Ответ 4

Единственное, что я хотел бы добавить к решению Mark Peters, это то, что вам не нужно перебирать ArrayList - вы должны иметь возможность использовать метод addAll (Collection) в Set. Вам нужно всего лишь перебрать весь список для выполнения суммирования.

Ответ 5

Вы можете получить количество элементов в списке, вызвав list.size(), однако некоторые элементы могут быть дубликатами или null (если ваша реализация списка позволяет null).

Если вы хотите, чтобы количество уникальных предметов и ваши предметы правильно реализовали equals и hashCode, вы можете поместить их все в набор и вызвать size, например:

new HashSet<>(list).size()

Если вы хотите, чтобы количество элементов с отличным itemId, вы можете сделать это:

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

Предполагая, что тип itemId правильно реализует equals и hashCode (что делает String в вопросе, если вы не хотите делать что-то вроде игнорирования регистра, в этом случае вы можете сделать map(i -> i.itemId.toLowerCase())).

Вам может понадобиться обработать элементы null, отфильтровав их перед вызовом map: filter(Objects::nonNull) или предоставив для них идентификатор элемента по умолчанию в вызове map: map(i -> i == null ? null : i.itemId).