簡體   English   中英

如何在 HashMap 中存儲和訪問 2 種不同類型的列表

[英]How to store and access 2 different types of List in a HashMap

我試圖在 HashMap 中存儲和訪問 2 種不同類型的列表,並在調用返回 HashMap 的方法時訪問它們,但我收到此錯誤: The constructor ArrayList<JournalArticle>(Object) is undefined
該方法如下所示:

public static HashMap<String, Object> getJournalArticles(long groupId) throws NumberFormatException, SystemException{
    List<JournalArticle> journalArticles = JournalArticleLocalServiceUtil.getStructureArticles(groupId);
    List<String> allJournalArticleIds = new ArrayList<String>();
    for (JournalArticle journalArticle : journalArticles) {
        allJournalArticleIds.add(journalArticle.getArticleId());
    }

    HashMap<String, Object> mapArticles = new HashMap<String,Object>();
    mapArticles.put("journalArticles", journalArticles);
    mapArticles.put("allJournalArticleIds", allJournalArticleIds);

    return mapArticles;
}

當我調用該方法並嘗試將它們各自的值存儲到一個新列表中時,我得到了之前注釋的錯誤:

HashMap<String, Object> mapArticles = JournalArticleUtil.getJournalArticles(scopeGroupId);
List<JournalArticle> allArticles = new ArrayList<JournalArticle>(mapArticles.get("journalArticles"));
List<String> allJournalArticleIds = new ArrayList<String>(mapArticles.get("allJournalArticleIds"));

出了什么問題以及如何解決?

我會使用編寫的 class 來保存此信息(您可能會發現使用Pair<L, R>之類的東西更快):

class ArticleHolder {
    private List<JournalArticle> journalArticles;
    private List<String> allJournalArticleIds;

    public ArticleHolder(List<JournalArticle> journalArticles,
        List<String> allJournalArticleIds) {
        this.journalArticles = journalArticles;
        this.allJournalArticleIds = allJournalArticleIds;
    }

    //getters + setters
}

並改變你的方法:

public static ArticleHolder getJournalArticles(long groupId) 
    throws NumberFormatException, SystemException {

    List<JournalArticle> journalArticles = 
                JournalArticleLocalServiceUtil.getStructureArticles(groupId);
    List<String> allJournalArticleIds = new ArrayList<String>();

    for (JournalArticle journalArticle : journalArticles) {
        allJournalArticleIds.add(journalArticle.getArticleId());
    }

    return new ArticleHolder(journalArticles, allJournalArticleIds);
}

除此之外:您對new ArrayList<JournalArticle>(...)的調用表明您打算創建新的數組列表實例(假設代碼可以編譯)。 即使您的 map 值被鍵入為Collection對象,也不應該這樣做。

恕我直言,快速解決方案是將 mapArticles 的類型更改為此HashMap<String, List<?>>然后:

List<JournalArticle> allArticles = new ArrayList<JournalArticle>((Collection<JournalArticle>)mapArticles.get("journalArticles"));
List<String> allJournalArticleIds = new ArrayList<String>((Collection<String>)mapArticles.get("allJournalArticleIds"));

因為 ArrayList 構造函數只支持這些選項:

 new ArrayList<T>();
 new ArrayList<T>(int capacity);
 new ArrayList<T>(Collection<? extends T> collection);

並且Object在編譯時不是一個集合。

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM