繁体   English   中英

LinkedHashMap与ArrayList-如何加载ArrayList?

[英]LinkedHashMap with ArrayList - How to load ArrayList?

我对Java相当陌生,正在尝试加载包含值ArrayList的LinkedHashMap。 我正在尝试从基于API的查询结果(Salesforce)的查询结果中加载值。

这是错误:“无法引用用不同方法定义的内部类内部的非最终变量细分”-细分变量用红色下划线给出此消息,Ive注意到了下面关注的这一行。

public LinkedHashMap<String, ArrayList<String>> sfFundIdsByContact;

    public ArrayList<String> getFundsIDsForContact(Contact aContact)
    {
        QueryResult queryResults = null;
        ArrayList<String> ids = new ArrayList<String>();
        int index = 0;
        Boolean done = false;
        String contactid = aContact.getId();
        String SCCPBId = null;

        if(sfFundIdsByContact == null || sfFundIdsByContact.size() <= 0){

       //Do the Salesforce API CALL and Return the results  
       ...          
       while (! done) 
       {        
        SObject[] records = queryResults.getRecords();

        for ( int i = 0; i < records.length; ++i ) 
            {
                    if(sfFundIdsByContact.containsKey(breakdown.getSalesConnect__Contact__c())){
                        sfFundIdsByContact.get(breakdown.getSalesConnect__Contact__c()).add(breakdown.getId());
                    } else {
//Line below in the add(breakdown.getId() - contains the error
                    sfFundIdsByContact.put(breakdown.getSalesConnect__Contact__c(), new ArrayList<String>() {{ add(breakdown.getId()); }});

        }

    }

所有建议表示赞赏。

在您的else块中,而不是:

new ArrayList<String>() {{ add(**breakdown.getId()**); }}

您可以使用:

new ArrayList<String>(Arrays.asList(breakdown.getId())

或者,由于只需要一个元素ArrayList ,可以使用Collections.singletonList来避免创建临时varargs数组:

new ArrayList<String>(Collections.singletonList(breakdown.getId())

new ArrayList<>()之后的{ ... }创建ArrayList的匿名子类,该子类仅是内部类。 在内部类内部,您不能访问非final局部变量。

您可以通过始终在for循环中检索List值来简化代码,然后如果它为null ,则创建一个新null并将其添加到Map ,否则将其添加到列表中。

for (int i = 0; i < records.length; i++) {
    List<String> value = sfFundIdsByContact.get(breakdown.getSalesConnect__Contact__c());
    if (value == null) {
        value = new ArrayList<String>();
        sfFundIdsByContact.put(breakdown.getSalesConnect__Contact__c(), value);
    }
    value.add(breakdown.getId());
}

作为建议,更改

LinkedHashMap<String, ArrayList<String>> sfFundIdsByContact

Map<String, List<String>> sfFundIdsByContact

请参阅“编程接口”是什么意思?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM