Java 打印和访问列表<;字符串[]>;

Java 打印和访问列表<;字符串[]>;,java,string,list,Java,String,List,我正在读取一个文件并将其存储在t1中。如何访问t1中的元素?当我试图打印它时,我得到的是地址而不是值。还有String和String[]之间的区别是什么 CSVReader reader = new CSVReader(new FileReader("src/new_acquisitions.csv")); List <String[]> t1 = reader.readAll(); int i = 0 while(i

我正在读取一个文件并将其存储在t1中。如何访问t1中的元素?当我试图打印它时,我得到的是地址而不是值。还有
String
String[]
之间的区别是什么

        CSVReader reader = new CSVReader(new FileReader("src/new_acquisitions.csv"));
        List <String[]> t1 = reader.readAll();

        int i = 0
        while(i < t1.size()) {
          System.out.println(t1.get(i));
          i++;
        }

String[]是一个字符串数组,因此它没有按预期打印,请尝试:

for (int i = 0; i < t1.size(); i++) {
    String[] strings = t1.get(i);
    for (int j = 0; j < strings.length; j++) {
        System.out.print(strings[j] + " ");
    }
    System.out.println();
}
或者更好:

for (String[] strings : t1) {
    System.out.println(Arrays.toString(strings));
}

String[]
是字符串数组。打印数组的地址-当您看到
[L
时,表示数组。您必须迭代每个数组的元素,而不是打印地址:

String[] temp = t1.get(i);
for (int j = 0; j < temp.length; j++)
    System.out.println(temp[j]);
String[]temp=t1.get(i);
对于(int j=0;j
正如Petar所提到的,您的列表是字符串数组的列表,因此您打印的是数组,而不是数组内容

打印数组内容的一种惰性方法是使用以下命令将数组转换为
列表

给予

[“你好”,“世界”]


打印带有数组的列表。当列表类重载toString()方法来打印每个元素时,数组使用对象使用的默认toString,它只打印类名和标识哈希

要打印所有内容,您必须遍历列表并使用array.toString()打印每个数组

或者将每个数组放入一个列表中

List<List<String>> tt1 = new ArrayList<List<String>>();
for(String[] ar: t1)tt1.add(Arrays.asList(ar));//wraps the arrays in constant length lists
System.out.println(tt1)
List tt1=new ArrayList();
for(String[]ar:t1)tt1.add(Arrays.asList(ar));//将数组包装在恒定长度的列表中
系统输出打印项次(tt1)

正如我在中所说,在创建自己的记录对象时,您可以实现
toString()
函数,以返回该信息的合理表示形式。

您可以打印列表内容,只需先将列表转换为数组,然后使用Arrays.toString,如下所示

System.out.println(Arrays.toString(your_list.toArray());

使用streams、Java 8及更高版本:

List<String[]> t1 = reader.readAll();
List<String> l = t1.stream()
                   .flatMap(x -> Arrays.stream(x))
                   .collect(Collectors.toList());

System.out.println(Arrays.toString(l.toArray()));
List t1=reader.readAll();
列表l=t1.stream()
.flatMap(x->array.stream(x))
.collect(Collectors.toList());
System.out.println(Arrays.toString(l.toArray());
基本上,flatMap()是这样做的:

Stream(String[])=>flatten和Mapit to=>Stream(String)


“将数组转换为列表”-可能转换为字符串?记住“接受”一个对您最有帮助的答案(使用绿色复选标记)。在Java 8中有没有方法可以不使用循环执行同样的操作?我得到了一个
列表
数组。deepToString(List.toArray())
效果非常好!数组。deepToString(List.toArray())对我有用。谢谢
for(String[] ar:t1)System.out.print("["+Arrays.toString(ar)+"]");
List<List<String>> tt1 = new ArrayList<List<String>>();
for(String[] ar: t1)tt1.add(Arrays.asList(ar));//wraps the arrays in constant length lists
System.out.println(tt1)
System.out.println(Arrays.toString(your_list.toArray());
List<String[]> t1 = reader.readAll();
List<String> l = t1.stream()
                   .flatMap(x -> Arrays.stream(x))
                   .collect(Collectors.toList());

System.out.println(Arrays.toString(l.toArray()));