Возвращение ArrayList из HashMap - PullRequest
0 голосов
/ 13 января 2020

У меня есть программа, в которой имена доноров добавляются в качестве ключа в HashMap с их городами (ArrayList of city) в качестве значения. Итак, я должен взять имя донора и сначала проверить, доступно ли это имя на карте или нет, если имя доступно и донор делает пожертвования из другого города, тогда мне нужно обновить список городов на карте и если это новый донор, тогда мне нужно просто добавить донора на карту.

Если кто-то может помочь мне с этой проблемой, я столкнулся с большим кризисом из-за этого. Полностью застрял.

Я приложил свой код.

import java.util.Scanner;
import java.util.ArrayList;
import java.util.HashMap;

public class MultCityMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        CollectionUtil cu = new CollectionUtil();
        String donorName,city;
        Scanner sc = new Scanner(System.in);
        ArrayList<String> donorCity = new ArrayList<String>();
        boolean choiceFlag = true;
        while(choiceFlag){
            System.out.println("Enter name");
            donorName = sc.nextLine();
            System.out.println("Enter city name");
            city = sc.nextLine();
            ArrayList<String> newCity = cu.nameKeyChecker(donorName,donorCity);
            newCity.add(city);
            cu.addDonor(donorName, newCity);
            System.out.println("donate again? (1/0)");
            int choice = sc.nextInt(); sc.nextLine();
            if(choice == 1)
                choiceFlag =  true;
            else
                choiceFlag = false;
        }
        System.out.println(CollectionUtil.donorMap);


    }
}
import java.util.ArrayList;
import java.util.HashMap;


public class CollectionUtil {

    static HashMap<String, ArrayList<String>> donorMap = new HashMap<>();

    public ArrayList<String> nameKeyChecker(String name, ArrayList<String> city){
        if(donorMap.containsKey(name))
        return (ArrayList<String>)donorMap.get(name);
        else
            donorMap.put(name, city);
        return (ArrayList<String>)donorMap.get(name);

    }

    public void addDonor(String name, ArrayList<String> city){

        donorMap.put(name, city);

    }

}

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Вы сделали этот путь более сложным, чем нужно.

Учитывая: Map<String, List<String>> donors; представляет имя донора со списком городов, пожертвованных, все, что вам нужно, чтобы добавить новый город:

donors.computeIfAbsent(donorName, d -> new ArrayList<String>()).add(newCity);

Этот код извлекает существующий список, но, если списка нет, он сначала «вычисляет» значение (создавая новый список). Затем этот список возвращается (будь то новый вычисленный список или существующий); так что вы просто добавляете в него новый город.

Вуаля. Вы можете избавиться от половины своего кода сейчас; вам не нужен класс util (обычно, если вы называете класс 'util', переосмысливаете вещи), nameKeyChecker не нужен, вам здесь также не нужна переменная donorCity.

1 голос
/ 13 января 2020

Определенно, код гораздо сложнее, чем должен быть. Возможно, вам нужно немного больше практиковаться в программировании.

Однако, если вы хотите исправить свой код, все, что вам нужно, это addDonor метод, который выглядит примерно так:


  public void addDonor(String name, String city) {
    if (donorMap.containsKey(name)) {
      donorMap.get(name).add(city);
    } else {
      ArrayList<String> newCity = new ArrayList<>();
      newCity.add(city);
      donorMap.put(name, newCity);
    }


  }

Вы можете получить избавиться от nameKeyChecker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...