如何在ArrayList中存储5行数据作为1个元素?

时间:2016-04-24 15:24:55

标签: java arrays arraylist bufferedreader filereader

我有一个数据文件,它包含专辑的5行数据,以及500个专辑。下面的代码将每一行存储为一个新元素,但是我将5行保存为1个元素,这是可能的,我将如何更改下面的代码来执行此操作?

String file_name = "Top500Albums.txt";
String line;
ArrayList aList = new ArrayList();

try {
    BufferedReader input = new BufferedReader(new FileReader(file_name));
    if (! input.ready()){
        throw new IOException();
    }
    while ((line = input.readLine()) !=null) {
        aList.add(line);
    }
    input.close();
}
catch(IOException e) {
    System.out.println(e);
}

int sz = aList.size();
for (int i=0; i< sz; i++)
{
    System.out.println(aList.get(i).toString());
}

4 个答案:

答案 0 :(得分:1)

您可以将您的arraylist数据转换为字符串数组,如下所示

您的ArrayList

List<String> list = new ArrayList<String>();

您可以使用toArray()方法

转换为String数组
String[] stringArray = list.toArray(new String[0]);

答案 1 :(得分:0)

如果你想转换&#39;对于数组的ArrayList,您可以使用以下代码:

private String[] toArray(ArrayList<String> arrayList) {
    String[] array = new String[arrayList.size()];
    arrayList.toArray(array);
    return array;
} 

但你应该问问自己为什么需要使用数组。 ArrayList只是一个内部数组的视图,因此查找并不像其他类型的列表那样慢,并且使用上面的方法,你将使用两倍的内存(你将把内部数组复制到一个新的内存中) )直到你的ArrayList被垃圾收集。

答案 2 :(得分:0)

  

如何在ArrayList中存储5行数据作为1个元素?

您创建一个包含5行的Java对象。

由于您没有告诉我们这5行的内容是什么,我只是将它们命名为line1到line5。你应该给这些字段更有意义的名字。

package com.ggl.testing;

public class Album {

    private final String line1;
    private final String line2;
    private final String line3;
    private final String line4;
    private final String line5;

    public Album(String line1, String line2, String line3, String line4,
            String line5) {
        this.line1 = line1;
        this.line2 = line2;
        this.line3 = line3;
        this.line4 = line4;
        this.line5 = line5;
    }

    public String getLine1() {
        return line1;
    }

    public String getLine2() {
        return line2;
    }

    public String getLine3() {
        return line3;
    }

    public String getLine4() {
        return line4;
    }

    public String getLine5() {
        return line5;
    }

}

然后,您创建一个专辑对象列表。

List<Album> albumList = new ArrayList<>(500);

您可以像这样将相册添加到列表中。

// Read five lines from the file
albumList.add(new Album(line1, line2, line3, line4, line5));

答案 3 :(得分:0)

您可以维护一个计数器以查看是否已启动每个新专辑数据

    String file_name = "Top500Albums.txt";
    String line;
    ArrayList aList = new ArrayList();

    int lineCounter = 1;
    try {
        StringBuilder albumData = new StringBuilder();
        BufferedReader input = new BufferedReader(new FileReader(file_name));
        if (!input.ready()) {
            throw new IOException();
        }
        while ((line = input.readLine()) != null) {
            if(lineCounter%5 == 0) {
                albumData.append(line);
                aList.add(albumData.toString());
                albumData.setLength(0);
            } else
                albumData.append(line+"\n");
            lineCounter++;
        }
        input.close();
    } catch (IOException e) {
        System.out.println(e);
    }

    int sz = aList.size();
    for (int i = 0; i < sz; i++) {
        System.out.println(aList.get(i).toString());
    }