Как хранить и получать доступ к 2 различным типам списков в HashMap - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь сохранить и получить доступ к 2 различным типам List в HashMap и получить к ним доступ, когда вызывается метод, возвращающий 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"));

What´не так и как решить?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2019

Я бы использовал класс, написанный для хранения этой информации (вы можете быстрее найти что-то вроде 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>(...) показывает, что вы намеревались создать новые экземпляры списка массивов (при условии, что код может скомпилироваться). В этом не должно быть необходимости, даже если значения вашей карты были напечатаны как Collection объектов.

1 голос
/ 11 ноября 2019

ИМХО Быстрое решение - изменить тип 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 не является коллекцией во время компиляции.

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