如何计数的列添加到一个ArrayList

问题描述:

我:如何计数的列添加到一个ArrayList

TAG | REVIEW 
A | hello 
B | yay 
A | win 
在一个ArrayList

,我试图让:

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

其中count是所有字符的总数具有相同标记的字符串。我一直在阅读关于集合和地图,但我完全失去了。有人可以解释如何解决这个问题吗?

1),以获得数:

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)然后,我想我需要匹配到一个和该标签的所有实例相结合。不知道如何做到这一点。

+0

的Java集合框架没有'List '..它只指定一个'List '。你的问题毫无意义。 – scottb

+0

'List'只接受一个泛型类型参数,所以不会编译。什么是您的实际收藏类型? – 4castle

+1

由于您一直在阅读有关集合框架的内容,为何不使用“Map”实现来执行此任务?关键将是标签和数值。你需要检查'Map'中是否存在标签(key),如果是这样,将它添加到现有的映射计数中,因为'Map.put()'将替换键值对。由于不清楚数据最初是如何很难给出明确答案的,你说'l'是一个'String',但把它当作一个数组? –

在java中没有像List<V, T>这样的东西。另外你不能使用你的数据Map,因为这种插入:

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

在地图,A | hello将获得取代A | win(它们具有相同的密钥)。

一个解决方案将是创建一个类,将包含TAGREVIEW信息:

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

然后使用java stream,你可以collect要如何数据:

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