Как в HashMap задать значение ArrayList?

429
03 февраля 2017, 04:16

Есть HashMap, в котором ключу соответствует ArrayList. Например:
фрукты: яблоки, апельсины, груши;
овощи : картофель и морковь.

hm уже объявлен и мне необходимо сказать, что если попалась пара "фрукты - яблоки", то записать ее, если потом попалась пара "фрукты - груши", то записать груши к яблокам.

Как это сделать? Пишу на Java 7.

Answer 1

Если по данному ключу нет списка, то создавать список для данного ключа. Затем добавлять новую еду в список, полученный по ключу:

private static final HashMap<Integer, ArrayList<Food>> typeToFood = new HashMap<>();
private static void add(int type, Food food)
{
    if (!typeToFood.containsKey(type))
    {
        typeToFood.put(type, new ArrayList<Food>());
    }
    typeToFood.get(type).add(food);
}

Полный пример:

private static class Food
{
    public final String name;
    public Food(String name)
    {
        this.name = name;
    }
}
private static final int
        FRUIT = 1,
        VEGETABLE = 2;
private static final HashMap<Integer, ArrayList<Food>> typeToFood = new HashMap<>();
public static void main(String[] args)
{
    add(FRUIT, new Food("apple"));
    add(FRUIT, new Food("orange"));
    add(VEGETABLE, new Food("potato"));
    add(VEGETABLE, new Food("carrot"));
    for (int type : typeToFood.keySet())
    {
        for (Food food : typeToFood.get(type))
        {
            System.out.print(food.name + " ");
        }
        System.out.println();
    }
}
private static void add(int type, Food food)
{
    if (!typeToFood.containsKey(type))
    {
        typeToFood.put(type, new ArrayList<Food>());
    }
    typeToFood.get(type).add(food);
}

При использовании Java 8 метод add можно укоротить. Например, так:

private static void add(int type, Food food)
{
    typeToFood.putIfAbsent(type, new ArrayList<>());
    typeToFood.get(type).add(food);
}
READ ALSO
Как ограничить доступ к методам классов библиотеки для проекта?

Как ограничить доступ к методам классов библиотеки для проекта?

Есть библиотека, в ней, к примеру, есть такой класс:

403
wsimport не парсит wsdl файл с 2 any свойствами в sequence

wsimport не парсит wsdl файл с 2 any свойствами в sequence

Существует wsdl файл из которого я пытаюсь сгенерировать java классы при помощи утилиты wsimportГенерация завершается ошибкой:

433
Меняется состояние visibility у select bootstrap

Меняется состояние visibility у select bootstrap

Есть такое модальное окно

341