Tel het aantal items in mijn arraylijst

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 itemIds 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 nulltoe).

Als u het aantal unieke items wilt en uw items equalsen hashCodecorrect implementeren, kunt u ze allemaal in een set plaatsen en sizedaarop, als volgt:

new HashSet<>(list).size()

Als u het aantal items met een duidelijke itemIdwilt, kunt u dit doen:

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

Ervan uitgaande dat het type itemIdequalsen hashCodecorrect implementeert (wat de Stringin 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 mapaanroep: 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.

Other episodes