2017-10-16 2 views
0

Je:Comment ajouter une colonne de comptes à un ArrayList

TAG | REVIEW 
A | hello 
B | yay 
A | win 

dans un ArrayList et je suis en train de faire:

TAG | COUNT 
A | 8  //hello+win =8 
B | 3  //yay =3 

où nombre est le nombre total de caractères dans tous les cordes avec le même tag. J'ai lu sur les collections et les cartes, mais je suis complètement perdu. Quelqu'un peut-il expliquer comment résoudre cela en morceaux?

1) Pour obtenir le nombre:

List<String,Integer> poll_reviewText_count=new ArrayList<>(); 
for(String l:poll_reviewText){ 
    poll_reviewText_count.add({l[0],l[1].length()}) //TAG, COUNT 
} 

2) Ensuite, je pense que je dois combiner toutes les instances de TAG qui correspondent à une somme. Je ne sais pas comment faire cela.

+0

Le Java Collections Framework n'a pas de 'Liste '. Elle ne spécifie qu'une 'Liste '. Votre question n'a pas beaucoup de sens. – scottb

+0

'List' ne prend qu'un paramètre de type générique, donc cela ne serait pas compilé. Quel est votre type de collection actuel? – 4castle

+1

Depuis que vous avez lu sur le framework Collections, pourquoi ne pas utiliser une implémentation 'Map' pour cette tâche? La clé sera l'étiquette et la valeur le nombre. Vous devrez vérifier si la balise (key) existe dans la 'Map', et si c'est le cas, ajoutez-la au nombre mappé existant, puisque Map.put()' remplacera un appariement de valeur de clé. Comme il n'est pas tout à fait clair comment les données sont à l'origine, il est difficile de donner une réponse définitive, Vous dites que 'l' est un' String' mais le traiter comme un tableau? –

Répondre

1

Il n'existe pas de List<V, T> en Java. vous pouvez aussi ne pas utiliser un Map pour vos données, car l'insertion ceci:

TAG | REVIEW 
A | hello 
B | yay 
A | win 

sur la carte, A | hello va obtenir remplacé par A | win (ils ont la même clé).

Une solution sera de créer une classe qui contiendra TAG et REVIEW informations:

class Bar { 
    String tag; 
    String review; 
    // setters - getters 
} 

Et puis en utilisant le java stream, vous pouvez collect les données que vous voulez:

Map<String, Integer> collect = poll_reviewText_count.stream() 
      .collect(Collectors.groupingBy(Bar::getTag, Collectors.summingInt(o -> o.getReview().length())));