Hallo zusammen.
Ich bin seit einigen Monaten neu in der Java-Welt und stehe vor einem verzwickten Problem, wofür ich gerne einige Ratschläge sammeln würde:
Ich habe eine Liste, welche mittels Zeitstempel (Tag-Monat-Jahr-Stunde-Minute-Sekunde) die Belastungen von Straßen differenziert ausgibt. Diese Listen sehen wie folgt aus:
Listenkopf:
Tag/Zeit, Straße,AnzFahrzeuge,AnzRadfahrer
Listeneinträge:
01-01-2000-12-00-00, Dorfstraße, 10,0
, Schulweg, 5, 1
, Dorstraße, 12, 2
01-01-2000-12-10-00, Dorfstraße, 22, 5
, Schulweg, 10, 3
, Dorfstraße, 27, 3
, Schulweg, 7, 2
usw....
Nun möchte ich erreichen, dass ich mittels Java eine Liste/ ein Set erstelle, welche mir schließlich die Belastungen der einzelnen Straßen zu den einzelnen Zeiten bzw. Tagen zusammenfasst. Quasi in der folgenden Form:
01-01-2000-12-00-00, Dorfstraße, 22,2
01-01-2000-12-00-00, Schulweg, 5, 1
[die Leerzeile dient lediglich der Übersicht]
01-01-2000-12-10-00, Dorfstraße, 49, 8
01-01-2000-12-10-00, Schulweg, 17, 5
Für diese Problematik habe ich mich nun einige Tage mit Listen, Sets und Maps beschäftigt und frage mich nun, ob ich mit meiner Collection einer ArrayList auf dem richtigen Weg bin. Schließlich müss beim Auslesen der "Grunddaten" ja immer die einzelnen Straßenbelastungen festgehalten und infolgedessen aufsummiert werden.
Folglich habe ich dazu den folgende Codes verwendet:
Ich habe absichtlich einiges ausgelassen um das Skript einigermaßen Minimal zu lassen.
Ich habe nun schon einige Überlegungen angestellt, innerhalb der While-Schleife die Daten so auszulesen, dass
- jeder Zeitstempel, also jede nichtleere Zelle (content[0]), einen Zähler bekommt und dass
- die Straßenbelastungen entsprechend als integer übersetzt und summiert werden.
Gerne würde ich die Lücken der Zeitstempel vorerst entsprechend füllen und dann die Inhalte einer jeden Zeile entsprechend aggregieren. Ist dies so einfach mit der Collection <ArrayList> möglich oder muss ich dabei auf Sets übergehen, um die vielen Filter bzw wenn-dann-Bedinungen zu erfüllen?
Über Anregungen und mögliche Verweise würde ich mich sehr freuen.
Ich bin seit einigen Monaten neu in der Java-Welt und stehe vor einem verzwickten Problem, wofür ich gerne einige Ratschläge sammeln würde:
Ich habe eine Liste, welche mittels Zeitstempel (Tag-Monat-Jahr-Stunde-Minute-Sekunde) die Belastungen von Straßen differenziert ausgibt. Diese Listen sehen wie folgt aus:
Listenkopf:
Tag/Zeit, Straße,AnzFahrzeuge,AnzRadfahrer
Listeneinträge:
01-01-2000-12-00-00, Dorfstraße, 10,0
, Schulweg, 5, 1
, Dorstraße, 12, 2
01-01-2000-12-10-00, Dorfstraße, 22, 5
, Schulweg, 10, 3
, Dorfstraße, 27, 3
, Schulweg, 7, 2
usw....
Nun möchte ich erreichen, dass ich mittels Java eine Liste/ ein Set erstelle, welche mir schließlich die Belastungen der einzelnen Straßen zu den einzelnen Zeiten bzw. Tagen zusammenfasst. Quasi in der folgenden Form:
01-01-2000-12-00-00, Dorfstraße, 22,2
01-01-2000-12-00-00, Schulweg, 5, 1
[die Leerzeile dient lediglich der Übersicht]
01-01-2000-12-10-00, Dorfstraße, 49, 8
01-01-2000-12-10-00, Schulweg, 17, 5
Für diese Problematik habe ich mich nun einige Tage mit Listen, Sets und Maps beschäftigt und frage mich nun, ob ich mit meiner Collection einer ArrayList auf dem richtigen Weg bin. Schließlich müss beim Auslesen der "Grunddaten" ja immer die einzelnen Straßenbelastungen festgehalten und infolgedessen aufsummiert werden.
Folglich habe ich dazu den folgende Codes verwendet:
Java:
//Pakete
import java.util.ArrayList;
import java.util.Collection;
import java.io.BufferedReader;
// Klasse für die Grunddaten
public class Files
{
String timeStamp, road;
int vehicles, bikes;
// hier folgen einige Methoden sowie Konstruktoren
public Files(String timeStamp, String road, int vehicles, int bikes)
{...}
}
//Klasse zum Erstellen der Listen aus einer CSV
public class CreateLists
{
Collection<Files> list = new ArrayList<Files>();
Collection<Files> aggList = new ArrayList<Files>();
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
String[] content = line.split(cvsSplitBy);
// Auslesen der CSV
try{
while ((line = br.readLine()) != null) {
// Hinzufügen der Listeneinträge in die Liste
// 0=timeStamp, 1=road, 2=vehicles, 3=bikes
list.add(new Files(content[0],content[1],content[2],content[3]));
}
// Es folgen noch Methoden zum Schreiben einer neuen CSV aus der Liste mittels einer For-Schleife
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (br != null)
{
try
{
br.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
Ich habe absichtlich einiges ausgelassen um das Skript einigermaßen Minimal zu lassen.
Ich habe nun schon einige Überlegungen angestellt, innerhalb der While-Schleife die Daten so auszulesen, dass
- jeder Zeitstempel, also jede nichtleere Zelle (content[0]), einen Zähler bekommt und dass
- die Straßenbelastungen entsprechend als integer übersetzt und summiert werden.
Gerne würde ich die Lücken der Zeitstempel vorerst entsprechend füllen und dann die Inhalte einer jeden Zeile entsprechend aggregieren. Ist dies so einfach mit der Collection <ArrayList> möglich oder muss ich dabei auf Sets übergehen, um die vielen Filter bzw wenn-dann-Bedinungen zu erfüllen?
Über Anregungen und mögliche Verweise würde ich mich sehr freuen.