Java HashMap导致ClassCastException

时间:2018-04-18 16:08:21

标签: java arraylist hashmap iterator classcastexception

我在javafx应用程序中的一个方法中使用了HashMap。此HashMap导致以下ClassCastException

  

java.lang.ClassCastException:java.util.HashMap $ Node无法强制转换为java.util.ArrayList

@FXML
private void initialize() {
    Map<Integer, ArrayList<WhatsOn>> movieMap = new HashMap<>();

    String whatsOnString = null;
    movieLabels = new Label[]{movie1, movie2, movie3, movie4, movie5, movie6};
    Label[] screenLabels;
    try {
        //get the list of screenings from the database
        whatsOnString = Harness.sendGet("whatson").toString();
        WhatsOn[] whatsOn = JSON.whatsOnFromJson(whatsOnString);

        //set the text of each label to the title of the movie
        for (int i = 0; i < whatsOn.length; i++) {
            if(!movieMap.containsKey(whatsOn[i].getMovie_ID())){
                movieMap.put(whatsOn[i].getMovie_ID(),new ArrayList<>(Arrays.asList(whatsOn[i])));
            } else {
                ArrayList<WhatsOn> list =  (ArrayList<WhatsOn>)movieMap.get(whatsOn[i].getMovie_ID());
                list.add(whatsOn[i]);
                System.out.println(movieMap.get(whatsOn[i].getMovie_ID()));
            }
        }


        Iterator iterator = movieMap.entrySet().iterator();
        int count = 0;
        while(iterator.hasNext()){
            ArrayList<WhatsOn> list = (ArrayList<WhatsOn>) iterator.next();
            setMovieLabel(count, list.get(0));
            for(WhatsOn whatson: list){
            }
            count++;
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.err.println("Could not recieve data from database");
    }
}

1 个答案:

答案 0 :(得分:1)

迭代地图的EntrySet将生成一系列实现Map.Entry接口的对象。在您的情况下,似乎您打算迭代地图的values()

Iterator<ArrayList<WhatsOn> iterator = movieMap.values().iterator();
int count = 0;
while(iterator.hasNext()) {
    ArrayList<WhatsOn> list = iterator.next();
    setMovieLabel(count, list.get(0));
    for(WhatsOn whatson: list) {
        // Presumably there's some code missing here too
    }
    count++;
}