2010-09-13 9 views
44

Je veux compter le nombre de itemsids dans mon tableau, puis-je avoir un exemple de comment je vais ajouter ceci à mon code. code ci-dessous;Compter le nombre d'éléments dans ma liste de tableaux

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; 
     } 
    } 
} 
+5

Je ne pense pas que la question s'intègre bien avec l'exemple de code. Cherchez-vous le nombre de itemsIds "distincts" ou similaires? –

Répondre

103

Le nombre de itemId s dans votre liste sera le même que le nombre d'éléments dans votre liste:

int itemCount = list.size(); 

Cependant, si vous cherchez à compter le nombre de itemID uniques (par @pst) alors vous devriez utiliser un ensemble pour garder une trace d'eux.

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

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

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

En dehors de la boucle créer un int:

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

ensuite dans la boucle, l'incrémenter:

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

Merde. Je pense que Mark Peters a posté une meilleure solution juste avant moi. – Freiheit

+0

Oui, cela n'a pas de sens d'essayer de compter chaque pas dans une boucle quand vous avez déjà la longueur du tableau original. – StriplingWarrior

0

La seule chose que je voudrais ajouter à la solution Mark Peters est que vous Vous n'avez pas besoin de parcourir la liste ArrayList - vous devriez pouvoir utiliser la méthode addAll (Collection) sur le Set. Vous avez seulement besoin de parcourir la liste entière pour faire les sommations.

+0

La liste contient les objets 'Propertyunbuf' alors que l'ensemble souhaité contient des chaînes. Vous ne pouvez pas utiliser addAll de l'un à l'autre ... vous aurez besoin de quelque chose comme la transformation de Google Collection pour le faire. –

+0

Bon point. Bien que je crois que si la méthode equals() de l'objet Propertyunbuf utilise l'itemId, vous pouvez déclarer votre ensemble comme une collection de Propertyunbuf et obtenir le même résultat net. Pourtant j'aime mieux ton approche - j'aime juste explorer les options et les alternatives :) – BigMac66

12

Vous souhaitez compter le nombre d'éléments de votre tableau. Il suffit d'utiliser:

int counter=list.size(); 

Moins de code augmente l'efficacité. Ne pas lancer la roue des ancêtres ...

Questions connexes