我有一个方法,它接受嵌套的字符串数组列表作为参数,如下所示:
public static String methodName(ArrayList<ArrayList<String>> param1,ArrayList<Integer> param2){
...some logic
}
我想用输入
测试这个方法input :"param1"= [
["HTML", "C#"],
["C#", "Python"],
["Python", "HTML"]
]
"param2"= [0, 0, 1]
我在网上搜索,发现这:我如何声明一个二维字符串数组列表?
这是我尝试的:
public static void main(String[] args){
ArrayList<ArrayList<String>> param1 = ...what should I put here?
List<List<String>> list = new ArrayList<List<String>>();
List<String> input = new ArrayList<String>();
input.add({"HTML", "C#"});//does not compile ... array initializer not allowed here
input.add({"C#", "Python"});
input.add({"Python", "HTML"});
如何将输入添加到嵌套的数组列表中?非常感谢您的帮助……
由于param1
被声明为ArrayList<ArrayList<...>>
,您别无选择,只能为嵌套元素显式地创建new ArrayList(...)
:
ArrayList<ArrayList<String>> param1 = new ArrayList<>(Arrays.asList(
new ArrayList<>(Arrays.asList("HTML", "C#")),
new ArrayList<>(Arrays.asList("C#", "Python"))
));
但是,作为一般规则,尝试编写接受尽可能宽松的参数类型的函数。在这种情况下,如果您可以将methodName
中的ArrayList<ArrayList<String>>
替换为List<List<String>>
,那么对于您的函数的用户来说将会好得多。
例如,他们可以这样创建param1
:
List<List<String>> param1 = Arrays.asList(
Arrays.asList("HTML", "C#"),
Arrays.asList("C#", "Python")
);
乌利希期刊指南正如@DavidConrad指出的,从Java 9开始,你可以使用List.of(...)
来代替Arrays.asList(...)
。
你可以做
List<List<String>> list = new ArrayList<>(); // No need for List<String> again, just the one diamond operator is enough here.
list.add(List.of("HTML", "C#"));
...