Java 双大括号初始化的替代方案

Java 双大括号初始化的替代方案,java,list,collections,hashmap,double-brace-initialize,Java,List,Collections,Hashmap,Double Brace Initialize,我有一个嵌套集合,其形式如下: HashMap<String, HashMap<String, List<String>>> errorList; 我想使用一个变量 我该怎么做呢?而不是 new ArrayList<String>() {{ add("Y"); add("Upload Success"); }} 这将为您提供一个固定大小的列表。如果希望以后能够添加或删除元素,请将其转换为ArrayList: new ArrayList<&

我有一个嵌套集合,其形式如下:

HashMap<String, HashMap<String, List<String>>> errorList;
我想使用一个变量

我该怎么做呢?

而不是

new ArrayList<String>() {{ add("Y"); add("Upload Success"); }}
这将为您提供一个固定大小的列表。如果希望以后能够添加或删除元素,请将其转换为
ArrayList

new ArrayList<>(Arrays.asList("Y", "Upload Success"))
然后进入你的循环

if (wasSuccessful) {
    errorList.put(tempName,
                  Collections.singletonMap("upl", new ArrayList<>(successList)));
} else {
    errorList.put(tempName,
                  Collections.singletonMap("upl", new ArrayList<>(failureList)));
}
if(wasuccessful){
errorList.put(临时名称,
集合。单音图(“upl”,新的ArrayList(successList));
}否则{
errorList.put(临时名称,
集合。单例映射(“upl”,新的ArrayList(failureList));
}
你可以更进一步,在循环之外构建地图。同样,如果希望内部映射为
HashMap
,只需将其转换为一个:
newhashmap(Collections.singletonMap(“upl”,newarrarylist(successList))

我还没有测试代码,我希望你可以修复,如果有一个打字错误

您注意到我完全避免了双括号初始化。虽然它很简单,但在概念和性能方面都有开销。您每次都在创建一个新的匿名子类,我认为这是不必要的。

而不是

new ArrayList<String>() {{ add("Y"); add("Upload Success"); }}
这将为您提供一个固定大小的列表。如果希望以后能够添加或删除元素,请将其转换为
ArrayList

new ArrayList<>(Arrays.asList("Y", "Upload Success"))
然后进入你的循环

if (wasSuccessful) {
    errorList.put(tempName,
                  Collections.singletonMap("upl", new ArrayList<>(successList)));
} else {
    errorList.put(tempName,
                  Collections.singletonMap("upl", new ArrayList<>(failureList)));
}
if(wasuccessful){
errorList.put(临时名称,
集合。单音图(“upl”,新的ArrayList(successList));
}否则{
errorList.put(临时名称,
集合。单例映射(“upl”,新的ArrayList(failureList));
}
你可以更进一步,在循环之外构建地图。同样,如果希望内部映射为
HashMap
,只需将其转换为一个:
newhashmap(Collections.singletonMap(“upl”,newarrarylist(successList))

我还没有测试代码,我希望你可以修复,如果有一个打字错误


您注意到我完全避免了双括号初始化。虽然它很简单,但在概念和性能方面都有开销。您每次都在创建一个新的匿名子类,我认为这是不必要的。

如果您想使用变量,为什么不直接使用呢?恐怕我还没有完全理解您的问题。可以吗?这段代码至少很吓人,你应该有对象而不是这么多集合。这是不可维护的,我只是在spring控制器中使用它,这样我就可以传递一个错误列表来填充视图(jsp)中的错误表。范围在该控制器方法和视图中。我想这个数据对象会在视图方面给我很大的灵活性。如果你想使用一个变量,为什么不直接使用它呢?恐怕我还没有完全理解你的问题。可以吗?这段代码至少很吓人,你应该有对象而不是这么多集合。这是不可维护的,我只是在spring控制器中使用它,这样我就可以传递一个错误列表来填充视图(jsp)中的错误表。范围在该控制器方法和视图中。我想这个数据对象会在视图方面给我很大的灵活性。可能的重复。你能告诉我singletonMap在这段代码中做了什么吗?。内部hashmap还有其他键(其中4个)。它们代表了一些上传数据中存在的不同错误类型,这类问题在咨询时最容易回答。是的,因为您想在其中添加更多元素,所以请将其转换为我所描述的
HashMap
。您能告诉我singletonMap在这段代码中的作用吗?。内部hashmap还有其他键(其中4个)。它们代表了一些上传数据中存在的不同错误类型,这类问题在咨询时最容易回答。是的,因为您想在其中添加更多元素,所以请将其转换为我所描述的
HashMap
if (wasSuccessful) {
    errorList.put(tempName,
                  Collections.singletonMap("upl", new ArrayList<>(successList)));
} else {
    errorList.put(tempName,
                  Collections.singletonMap("upl", new ArrayList<>(failureList)));
}