считать и распечатывать одинаковое количество вхождений в строке в java - PullRequest
0 голосов
/ 10 октября 2018

Нужна помощь для сортировки и эффективной печати одинаковых вхождений слов в строке ниже.

Вот вхождение строки: {java=2, occurences=1, program=3, sample=1, the=2}

Ожидаемый результат:

Java = 2, вхождения = 1, образец = 1, = 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 голосов
/ 10 октября 2018

Вы можете просто преобразовать приведенный выше код в одну строку, используя 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])));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...