Umgang mit referenzierten Objekten bei ArrayList

Hallo Zusammen,

hat jemand von Euch einen eleganten und zeit/speichereffizienten Vorschlag für einen Umgang mit einer ArrayList, die wiederum eine List enthält. Aus einer tsv-Datei wird jede einzelne Zeile ausgelesen und die einzelnen per tab getrennten Felder in einem Array abgelegt. Pro Zeile möchte ich zwei Felder auslesen und in einer ArrayList ablegen. Das aktuelle Problem (siehe Code) ist, daß ich die innere Liste mit .clear() leere, was aber dazu führt, daß auch der Wert innerhalb der ArrayList entfernt wird. Eine Kopie der inneren Liste ist entsprechend auch keine Lösung.

Java:
	public static List<List<String>> getBuffReader(String file) {
		System.out.println("inside getBuffer");
		List<List<String>> outerL = new ArrayList<List<String>>();
		List<String> tsvList = new ArrayList<String>();
		BufferedReader tsvReader = null;
		if (tsvReader == null) {
			try {
				tsvReader = new BufferedReader(new InputStreamReader(
						new FileInputStream(file), "utf-8"));
				try {
					String line = tsvReader.readLine();
					System.out.println("test");
					while (line != null) {
						tsvList.clear();
						String splitarray[] = line.split("\\t");
						System.out.println(splitarray.length);

						if (splitarray.length == 7) {
							tsvList.add(splitarray[5]);
							tsvList.add(splitarray[6]);
						} else if (splitarray.length == 8) {
							tsvList.add(splitarray[5]);
							tsvList.add(splitarray[7]);
						} else if (splitarray.length >= 9) {
							tsvList.add(splitarray[5]);
							tsvList.add(splitarray[9]);
						}
						outerL.add(tsvList);
						System.out.println("inside tsv");
						line = tsvReader.readLine();
					}

				} finally {
					tsvReader.close();
				}
			} catch (IOException e) {
			}
		}
		return outerL;
	}

Das Ergebnis der ArrayList, die aus einer List bestehen soll, sollte wiefolgt aussehen:

[[wert1Zeile1,wert2Zeile1], [wert1Zeile2,wert2Zeile2]....]

Vielen Dank
 
Du musst jedes mal eine neue Liste erstellen.
Ersetzte einfach
Java:
tsvList.clear();
mit
Java:
tsvList = new ArrayList<String>();
 

Zurück
Oben