2011-12-28 35 views
0

我有一个字符串列表,我试图让一个方法告诉我哪个字符串在列表中出现了更多的事件。如何获得列表中更多的出现字符串

以下是我迄今所做的:

package codekata; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

public class OcurrenciasEnLista { 

    public static void main(String[] args) { 

     List<String> lista = new ArrayList<String>(); 
     lista.add("test"); 
     lista.add("foo"); 
     lista.add("foo"); 
     lista.add("foo"); 
     lista.add("bar"); 
     lista.add("crack"); 
     moreOftenWord(lista); 
    } 

    private static void moreOftenWord(List<String> lista) { 
     Map<String, Integer> mapa = new HashMap<String, Integer>(); 

     for (String palabra: lista) 
      addOrIncrementCount(mapa, palabra); 


    } 

    private static void addOrIncrementCount(Map<String, Integer> counters, 
      String toAdd) { 

     Integer currValue = counters.get(toAdd); 
     if (currValue == null) 
      counters.put(toAdd, 1); 
     else 
     { 
      counters.put(toAdd, currValue + 1); 
     } 
    } 
} 

我不知道该怎么做的是在moreOftenWord方法已经返回-The可字。

有人可以给我一个线索吗?

回答

5

列表中最常见的元素称为列表的"mode"

http://www.dreamincode.net/forums/topic/39745-get-mode-of-a-list/是“列表java模式”的第一个结果,如果您想要代码示例,该列表看起来相关。

以最常见的元素让你建立你的柜台的地图后,你可能想要做像

Map.Entry<String, Integer> mode = null; 
for (Map.Entry<String, Integer> e : counters.entrySet()) { 
    if (mode == null || mode.value() < e.value()) { 
    mode = e; 
    } 
} 
// Most common string in mode.getKey() 

这假定您重新定义

Map counters 

统称为

Map<String, Integer> counters 
4

Multiset数据结构保持每ele的计数补充它。所以你可以删除所有的样板代码,如果你使用它。然后,您需要做的就是遍历Multiset并查找具有最大数量的元素。

番石榴图书馆有许多这样有用的数据结构和更多。

相关问题