Ik wil het aantal item-ID’s in mijn array tellen, kan ik een voorbeeld krijgen van hoe ik dit aan mijn code zou toevoegen. onderstaande code;
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;
}
}
}
Antwoord 1, autoriteit 100%
Het aantal itemId
s in uw lijst zal hetzelfde zijn als het aantal elementen in uw lijst:
int itemCount = list.size();
Als u echter het aantal unieke itemIds (per @pst) wilt tellen, moet u een set gebruiken om ze bij te houden.
Set<String> itemIds = new HashSet<String>();
//...
itemId = p.getItemId();
itemIds.add(itemId);
//... later ...
int uniqueItemIdCount = itemIds.size();
Antwoord 2, autoriteit 9%
U wilt het aantal item-ID’s in uw array tellen. Gebruik gewoon:
int counter=list.size();
Minder code verhoogt de efficiëntie. Vind het wiel niet opnieuw uit…
Antwoord 3
Buiten je lus maak je een int:
int numberOfItemIds = 0;
for (int i = 0; i < key.length; i++) {
Verhoog het vervolgens in de lus:
itemId = p.getItemId();
numberOfItemIds++;
Antwoord 4
Je kunt het aantal elementen in de lijst krijgen door list.size()
aan te roepen, maar sommige elementen kunnen duplicaten zijn of null
(als je lijstimplementatie staat null
toe).
Als u het aantal unieke items wilt en uw items equals
en hashCode
correct implementeren, kunt u ze allemaal in een set plaatsen en size
daarop, als volgt:
new HashSet<>(list).size()
Als u het aantal items met een duidelijke itemId
wilt, kunt u dit doen:
list.stream().map(i -> i.itemId).distinct().count()
Ervan uitgaande dat het type itemId
equals
en hashCode
correct implementeert (wat de String
in de vraag doet, tenzij je iets wilt doen als negeer hoofdletters, in dat geval zou je map(i -> i.itemId.toLowerCase())
) kunnen doen.
Mogelijk moet u null
-elementen verwerken door ze te filteren vóór de aanroep van map
: filter(Objects::nonNull)
of door het verstrekken van een standaard itemId voor hen in de map
aanroep: map(i -> i == null ? null : i.itemId)
.
Antwoord 5
Java 8 stream API gebruiken:
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();
Antwoord 6
Het enige dat ik aan de oplossing van Mark Peters zou willen toevoegen, is dat je de ArrayList niet hoeft te herhalen – je zou de methode addAll(Collection) op de set moeten kunnen gebruiken. U hoeft alleen de hele lijst te herhalen om de sommaties te doen.