簡體   English   中英

無法從保存在對象中的ArrayList和保存在HashMap中的對象中獲取值

[英]Unable to fetch value from ArrayList saved in an object , and object saved in a HashMap

我正在使用Swing,無法從保存在對象中的arrayList獲取值,然后將其保存在hashMap

system.out.println打印任何值。

我的代碼包含一個過程列表和一個參數列表。 單擊添加參數按鈕后 ,參數將添加到paramList

單擊添加過程按鈕時,將從textfield獲取的過程保存在procList

paramList中的值保存在新對象中(對象包含具有getter和setter的arraylist)

Hashmap將過程名稱存儲為key ,將對象存儲為value

然后,我有另一個事件,我們在GUI上單擊過程列表,然后獲取選定的過程名稱,

所選過程名稱可以用作從HashMap中獲取值的鍵。 我們使用鍵從hashmap獲取參數的數組列表。

但是,當我嘗試在GUI中顯示時,它為空白,然后我嘗試使用System.out.println來查看值是否存在,而print :-(

問題在於private void getParameterList

這是代碼。

//variable declaration
 String procedureName;
 String parameterName;
 ArrayList<String> procList = new ArrayList<>();
 ArrayList<String> paramList = new ArrayList<>();
 HashMap<String,ParamListPojo> procMapper = new HashMap<>();

private void Button_addParameterActionPerformed(java.awt.event.ActionEvent evt) {                                                    
       parameterName = paramField.getText();
       paramList.add(parameterName);
       //System.out.println(paramList);

       DefaultListModel paramListModel = new DefaultListModel();
       //populating DefaultListModel for parameters
        Iterator<String> it2 = paramList.iterator();
        while(it2.hasNext()){
            paramListModel.addElement(it2.next()); 
        }

        //populating parameterList
        parameterList.setModel(paramListModel); 
        paramField.setText(""); 
    }     

private void button_addProcedureActionPerformed(java.awt.event.ActionEvent evt) {                                                    
        //procedureName = level_funcPrefix.getText() +procedureField.getText();
        ParamListPojo paramListPojo = new ParamListPojo();
        procList.add(procedureName);

        //Storing procedures and parameters in MAP
        paramListPojo.setParamList(paramList); 
        procMapper.put(procedureName,paramListPojo);
        System.out.println(procList);
        System.out.println(paramList);
        System.out.println(procMapper);

        procedureField.setText("");

         DefaultListModel procListModel  = new DefaultListModel();
         DefaultListModel paramListModel = new DefaultListModel();

         // populating DefaultListModel for procedureList
         Iterator<String> it1 = procList.iterator();
         while(it1.hasNext()){
             procListModel.addElement(it1.next());
         }

        //populating DefaultListModel for parameters
        Iterator<String> it2 = paramList.iterator();
        while(it2.hasNext()){
            paramListModel.addElement(it2.next()); 
        }

        // populating procedureList 
        procedureList.setModel(procListModel);
        procedureList.setSelectedIndex(procList.size()-1);

        //populating parameterList
        parameterList.setModel(paramListModel); 
        paramList.clear();
    }  

// populate Parameter List on GUI when procedure is selected 
    private void getParameterList(java.awt.event.MouseEvent evt) {                                  

        String procedure = procedureList.getSelectedValue();
        System.out.println("MouseClickEvent , procedure is "+procedure);

        //ParamListPojo prjL = new ParamListPojo();
        ParamListPojo prjL = procMapper.get(procedure);
        paramList = prjL.getParamList();

        System.out.println(paramList);
        //Declaring DefaultListModel for parameters
        DefaultListModel paramListModel = new DefaultListModel();

        Iterator<String> it = paramList.iterator();
        while(it.hasNext()){
            String parameter = it.next();
            paramListModel.addElement(parameter); 
            System.out.println(parameter);
        }

控制台輸出為

[p_csacas]
[scasca, ascacasc, ascacs]
{p_csacas=wrapperbuilder.ParamListPojo@1150594}
[p_csacas, f_ascasc]
[rrrrrr]
{p_csacas=wrapperbuilder.ParamListPojo@1150594, f_ascasc=wrapperbuilder.ParamListPojo@26df23}
MouseClickEvent , procedure is p_csacas
[]

因此,我們可以看到在添加過程時,兩個列表中都存在值,並且HashMAP中也存在該值。但是,當在GUI中的列表上單擊鼠標時,輸出將變為空白。

GUI的示例圖像如下所示 GUI的樣本圖像

請在這件事上給予我幫助 :-(

問題已經解決了。 問題出在ParamListPojo類中ParamListPojo的setter方法上。

public void setParamList(ArrayList<String> procList) {
        //this.prmList = procList;
                prmList.addAll(procList);
    }

以前我使用this.prmList = procList現在我正在使用prmList.addAll(procList);

ArrayList 之謎<object>在 HashMap<div id="text_translate"><p> 我只是在運行下面的代碼,我對結果感到驚訝。 有人可以解釋一下這里發生了什么嗎? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在這里做錯了什么,請告訴我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object>

[英]Mystery with ArrayList<Object> in a HashMap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 從Arraylist中刪除一個對象 <object> 保存在sharedPreferences中 有沒有辦法列出保存在Hashmap上的對象的值 將 json 文件添加到 object 並保存到 arraylist 從 hashmap 中的 arraylist 中刪除 Object 對Hashmap的ArrayList進行排序 <String,Object> 按整數值 只有arraylist的最后一行保存在JSON對象中 可序列化的對象到Hashmap的Arraylist ArrayList 之謎<object>在 HashMap<div id="text_translate"><p> 我只是在運行下面的代碼,我對結果感到驚訝。 有人可以解釋一下這里發生了什么嗎? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在這里做錯了什么,請告訴我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object> 從python訪問保存在hazelcast中的java對象 從構造函數中保存的對象創建對象
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM