【问题标题】:How to add inputs of ArrayList <String> to a nested arraylist in java如何将 ArrayList <String> 的输入添加到 java 中的嵌套数组列表
【发布时间】:2021-12-14 20:31:34
【问题描述】:

我有一个方法,它接受一个嵌套的字符串数组列表作为参数,如下所示:

 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]

我在网上搜索发现这个:How do I declare a 2D String arraylist?

这是我尝试过的:

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"});

如何将输入添加到嵌套的 ArrayList? 将不胜感激任何帮助...

【问题讨论】:

    标签: java arrays list arraylist


    【解决方案1】:

    由于param1 被声明为ArrayList&lt;ArrayList&lt;...&gt;&gt;,您别无选择,只能为嵌套元素显式创建new ArrayList(...)

    ArrayList<ArrayList<String>> param1 = new ArrayList<>(Arrays.asList(
        new ArrayList<>(Arrays.asList("HTML", "C#")),
        new ArrayList<>(Arrays.asList("C#", "Python"))
    ));
    

    但是,作为一般规则,请尝试编写尽可能接受允许参数类型的函数。在这种情况下,如果您可以将methodName 中的ArrayList&lt;ArrayList&lt;String&gt;&gt; 替换为List&lt;List&lt;String&gt;&gt;,那对您函数的用户来说会更好。

    例如,他们可以这样创建param1

    List<List<String>> param1 = Arrays.asList(
        Arrays.asList("HTML", "C#"),
        Arrays.asList("C#", "Python")
    );
    

    UPD 正如@DavidConrad 指出的那样,自Java 9 起,您可以使用List.of(...) 而不是Arrays.asList(...)

    【讨论】:

    • 感谢您...这两种解决方案都有效。我需要 ArrayList 选项进行本地测试。感谢您的见解。
    • 或者使用List.of代替Arrays.asList
    【解决方案2】:

    你可以的

    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#"));
    ...
    

    【讨论】:

    • 感谢您的回复。这是否意味着我不能再次使用 ArrayList 作为方法参数。 ArrayList 有出路吗?
    • @kingified 你可以像new ArrayList&lt;&gt;(List.of("HTML", "C#"))这样包装List.of调用,并在声明中使用ArrayList而不是List,但是针对接口而不是实现进行编程是个好建议,并且在 Java 中非常标准。
    • 感谢您的洞察
    猜你喜欢
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    相关资源
    最近更新 更多