Карты Java: как распечатать количество вхождений для каждого значения и ключей, которые разделяют это значение

#java #maps

#java #Карты

Вопрос:

 ImmutableMap.Builder<String, String> p = ImmutableMap.builder();
p.put("item1","error1");
p.put("item2","error1");
p.put("item3","error3");
p.put("item4","error3");
p.put("item5","error3");
p.put("item6","error4");
...
Map<String, String> map = p.build();
  

Моя цель — распечатать следующее:

 <number of occurrences of an error> occurrences of <error name>: <the items that have that error>
<number of occurrences of an error> occurrences of <error name>: <the items that have that error>
<"..." if there are more than 2 types of errors>
  

Кроме того, если более 2 элементов имеют одну и ту же ошибку, он должен распечатать только имена первых 2 элементов с этой ошибкой.

Для приведенного выше кода он должен распечатать:

 2 occurrences of error1: item1, item2 
3 occurrences of error3: item3, item4, ...
...
  

Я пытаюсь исправить проблему в проекте с открытым исходным кодом, с которым я столкнулся, но у меня нет большого опыта работы с картами. Любая помощь будет принята с благодарностью.

Комментарии:

1. опубликовал ответ, посмотрите, поможет ли это.

Ответ №1:

 public static void main(String[] args) throws IOException  {
    Map<String, String> p = new HashMap<String, String>();
    p.put("item1","error1");
    p.put("item2","error1");
    p.put("item3","error3");
    p.put("item4","error3");
    p.put("item5","error3");
    p.put("item6","error4");
    
    Map<String, String> resultMap = new HashMap<String, String>();
    for(Map.Entry<String, String> entry: p.entrySet()) {
        if(resultMap.containsKey(entry.getValue())) {
            String result = resultMap.get(entry.getValue()) ", " entry.getKey();
            if(result.split(",").length <= 2) { //For less than 2 Occurrence
                resultMap.put(entry.getValue(), result);
            }else {
                resultMap.put(entry.getValue(), resultMap.get(entry.getValue()) ", ...");
            }
        }else {
            resultMap.put(entry.getValue(), entry.getKey());
        }
    }
    //Printing the result Map
    for(Map.Entry<String, String> entry: resultMap.entrySet()) {
        System.out.println(entry.getKey() " -> " entry.getValue());
    }
}
  

вывод

 error4 -> item6
error1 -> item2, item1
error3 -> item4, item3, ...