![](/img/trans.png)
[英]How to store arraylist of LinkedHashMap as value of LinkedHashMap in java
[英]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.