我想计算数组中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;
}
}
}
答案 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
)。
如果您想要数量独特的商品,并且您的商品正确实现了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)
调用中为它们提供默认的itemId: {{1}}。