List как значение для HashMap

List как значение для HashMap

В качестве значения HashMap может принимать объекты, в том числе и List.


Double[] doubleArr = {5.0, 120.0, 98.0};
List<Double> arrList = new ArrayList<>(Arrays.asList(doubleArr));
List<Double> linkList = new LinkedList<>();
linkList.add(17.0);
linkList.add(100500.0);
linkList.add(6587.0);

Map<String, List<Double>> m = new HashMap<>();
m.put("one", arrList);
m.put("two", linkList);

Set<Map.Entry<String, List<Double>>> set = m.entrySet();
for (Map.Entry<String, List<Double>> entry : set) {
   for (Double i : entry.getValue()) {
      System.out.println(entry.getKey() + " : " + i/10);
   }
}
/*
one : 0.5
one : 12.0
one : 9.8
two : 1.7
two : 10050.0
two : 658.7
*/
Если для List не указать тип хранимых данных, в качестве типа будет назначен Object. Если не планируется выполнять специфические операции с элементами коллекции, тип её объектов можно не указывать.


Map<String, List> m2 = new HashMap<>(); // запись корректная
m2.put("one", arrList);
m2.put("two", linkList);

Set<Map.Entry<String, List>> set2 = m2.entrySet();
for (Map.Entry<String, List> entry : set2) {

   // ошибка компиляции. Невозможно преобразовать Object к Double
   //for (Double i : entry.getValue()) {

   for (Object i : entry.getValue()) {

      // ошибка компиляции. Object нельзя использовать в контексте '/'
      // System.out.println(entry.getKey() + " : " + i/10); 

      System.out.println(entry.getKey() + " : " + (Double)i/10);
      System.out.println(i);
   }
}
Коллекции