Подсчитайте количество элементов в списке массивов
Я хочу подсчитать количество элементов в моем массиве, могу ли я получить пример того, как я хотел бы добавить это в свой код. код ниже;
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;
}
}
}
Ответы
Ответ 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)
.