计算并打印java中String中相同的出现次数

时间:2018-10-10 16:37:43

标签: java string dictionary

需要帮助对以下字符串中出现的相同单词进行排序和有效打印。

以下是该字符串的出现:{java=2, occurences=1, program=3, sample=1, the=2}

预期输出:

java = 2,出现次数= 1,样本= 1,the = 2

String str = "sample program java program the occurences the java program";
String[] inputstr = str.split(" ");
TreeMap<String,Integer> map = new TreeMap<>();
for(String input: inputstr) {
    if(map.containsKey(input)) {
        int value = map.get(input);
        map.put(input,value+1);
    } else {
        map.put(input,1);
    } 
}

1 个答案:

答案 0 :(得分:3)

您可以使用Java-8简单地将以上代码转换为一行

Map<String, Long> countMap = Arrays.stream(inputstr)
              .collect(Collectors.groupingBy(Object::toString, Collectors.counting()));

编辑:

我们需要在地图中查找出现多个的值。使用以下代码即可实现:

// inversed the map using "google-guava.jar"
Multimap<Long, String> inverseMap = HashMultimap.create();
for (Entry<String, Long> entry : countMap .entrySet()) {
    inverseMap.put(entry.getValue(), entry.getKey());
}

for (Entry<Long, Collection<String>> entry : inverseMap.asMap().entrySet()) {
    // split the values into an array
    Object[] split = entry.getValue().stream().toArray(); 
    if (split != null && split.length > 1) { 
        for (int j = 0; j < split.length; j++) {
            System.out.println(String.valueOf(split[j]) + " : " 
                             + countMap.get(String.valueOf(split[j])));
        }
    }
}