Java计数数组中每个项目的出现次数

Fav*_*las 26 java arrays count

是否有任何方法可以计算数组上每个项目的出现次数?

让我们说:

String[] array = {"name1","name2","name3","name4", "name5"};
Run Code Online (Sandbox Code Playgroud)

这里的输出将是:

name1 1
name2 1
name3 1
name4 1
name5 1
Run Code Online (Sandbox Code Playgroud)

如果我有:

String[] array = {"name1","name1","name2","name2", "name2"};
Run Code Online (Sandbox Code Playgroud)

输出将是:

name1 2
name2 3
Run Code Online (Sandbox Code Playgroud)

这里的输出只是为了证明预期的结果.

Dam*_*ian 38

List asList = Arrays.asList(array);
Set<String> mySet = new HashSet<String>(asList);
for(String s: mySet){

 System.out.println(s + " " +Collections.frequency(asList,s));

}
Run Code Online (Sandbox Code Playgroud)

  • 根据我的经验,Collections.frequency 太慢。如果性能是一个问题,请避免。 (2认同)
  • 不是真的,如果它是HashSet或HashMap. (2认同)

Ale*_* C. 27

使用,你可以这样做:

String[] array = {"name1","name2","name3","name4", "name5", "name2"};
Arrays.stream(array)
      .collect(Collectors.groupingBy(s -> s))
      .forEach((k, v) -> System.out.println(k+" "+v.size()));
Run Code Online (Sandbox Code Playgroud)

输出:

name5 1
name4 1
name3 1
name2 2
name1 1
Run Code Online (Sandbox Code Playgroud)

它的作用是:

  • Stream<String>从原始数组创建一个
  • 按身份对每个元素进行分组,得到a Map<String, List<String>>
  • 对于每个键值对,打印键和列表的大小

如果你想获得一个Map包含每个单词出现次数的数据,可以这样做:

Map<String, Long> map = Arrays.stream(array)
    .collect(Collectors.groupingBy(s -> s, Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)

有关更多信息:

希望能帮助到你!:)


Uri*_*Uri 17

您可以使用MultiSet来自Google Collections/Guava或Bag来自Apache Commons的.

如果您有一个集合而不是一个数组,您可以使用addAll()将整个内容添加到上面的数据结构,然后将该count()方法应用于每个值.A SortedMultiSetSortedBag将按照定义的顺序为您提供物品.

Google Collections实际上有非常便捷的方式从数组转到SortedMultiset.

  • Bag的链接是404. (3认同)

小智 5

使用 HashMap 就像在公园散步一样。

main(){
    String[] array ={"a","ab","a","abc","abc","a","ab","ab","a"};
    Map<String,Integer> hm = new HashMap();

    for(String x:array){

        if(!hm.containsKey(x)){
            hm.put(x,1);
        }else{
            hm.put(x, hm.get(x)+1);
        }
    }
    System.out.println(hm);
}
Run Code Online (Sandbox Code Playgroud)