Java 中的 int 数组列表

List of int array in Java

提问人:rickygrimes 提问时间:10/9/2021 最后编辑:Arvind Kumar Avinashrickygrimes 更新时间:10/11/2021 访问量:290

问:

如何打印包含原始类型 int 对象的 List 的内容?首选答案,将其打印在一行中。这是我拥有的代码。

public static void main(String[] args) {
    List<int[]> outputList = new ArrayList<>();
    int[] result = new int[] { 0, 1 };
    int[] result2 = new int[] { 2, 3 };
    outputList.add(result);
    outputList.add(result2);

    System.out.println(Arrays.toString(outputList.get(0)));
}

这将给我 [0,1],但我正在寻找 {[0,1],[2,3]}

Java 数组 字符串 列表

评论

5赞 Green Cloak Guy 10/9/2021
System.out.println(Arrays.toString(outputList.toArray()))?
0赞 HopefullyHelpful 10/9/2021
顺便说一句,从什么时候开始允许在泛型中使用素数或数组。?没有跟上,但会对开始允许的 Java 版本感兴趣
3赞 Stephen C 10/9/2021
一如既往。(或者至少,从 Java 5 引入泛型开始。
2赞 Mark Rotteveel 10/9/2021
@HopefullyHelpful 泛型中不允许使用 Int,但数组(甚至 int 数组)是对象,因此可以在泛型中使用,自从引入泛型以来就是这种情况。

答:

3赞 Saurabh Dhage 10/9/2021 #1

你可以通过使用类来做到这一点StringBuffer

public static void main(String[] args) {
    List<int[]> outputList = new ArrayList<>();
    int[] result = new int[]{0, 1};
    int[] result2 = new int[]{2, 3};
    outputList.add(result);
    outputList.add(result2);
    StringBuffer output=new StringBuffer();
    for (int[] ints : outputList)  output.append(Arrays.toString(ints)).append(",");
    output.insert(0,"{");
    output.replace(output.capacity()-2,output.capacity()-1,"}");
    System.out.println(output);
 }

输出:

{[0, 1],[2, 3]}
2赞 Stephen C 10/9/2021 #2

溶液

这个单行应该这样做:

 System.out.println(list.stream().map(Arrays::toString)
                                 .collect(Collectors.joining(", ", "{", "}")));

(为了便于阅读,我用行换行。


非解决方案

  1. 由于您希望将外部列表包含在中,因此我们不能在上面的解决方案中使用。同样,会给我们错误的输出。{ ... }List::toStringStreamArrays::deepToString

    显然,这可以使用 修复,但这让我觉得很丑陋。最好首先使用正确的“封闭器”。(或更改要求!!String::replace)

  2. 调用 proproduced using 将为您提供以下内容:Arrays::toString()int[][]List::toArray

     [[I@2a40cd94, [I@f4168b8]
    

    ...这甚至不接近正确。

    Arrays::toString对对象的调用,数组类不会重写实现。toStringint[]Object::toString

    Arrays::deepToString解决了问题的这一方面。

3赞 Arvind Kumar Avinash 10/9/2021 #3

以下单行可以满足您的要求:

System.out.println(
                Arrays.deepToString(outputList.toArray()).replaceAll("(?<=^)\\[", "{").replaceAll("\\](?=$)", "}"));

它使用正向后视和正前瞻正则表达式断言。请注意,它用于文本的开头和文本的结尾。为我们提供了字符串,此解决方案将该字符串的开头和字符串的末尾分别替换为 和 。^$Arrays.deepToString(outputList.toArray())[[0, 1], [2, 3]][]{}

如果您还想删除所有空格,则可以再链接一个替换项,如下所示:

System.out.println(Arrays.deepToString(outputList.toArray()).replaceAll("(?<=^)\\[", "{")
            .replaceAll("\\](?=$)", "}").replace(" ", ""));

演示:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String args[]) {
        List<int[]> outputList = new ArrayList<>();
        int[] result = new int[] { 0, 1 };
        int[] result2 = new int[] { 2, 3 };
        outputList.add(result);
        outputList.add(result2);

        System.out.println(
                Arrays.deepToString(outputList.toArray()).replaceAll("(?<=^)\\[", "{").replaceAll("\\](?=$)", "}"));

        System.out.println(Arrays.deepToString(outputList.toArray()).replaceAll("(?<=^)\\[", "{")
                .replaceAll("\\](?=$)", "}").replace(" ", ""));
    }
}

输出:

{[0, 1], [2, 3]}
{[0,1],[2,3]}

ONLINE DEMO