[英]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.