добавление в список данных полученных при использовании класса Scanner
Я считываю сканером csv файл. и добавляю результат в список, но я получаю не то, что мне нужно. В списке получается всего один индекс(в котором массив данных). Мне потом надо преобразовать список в массив и перебрать его, но у этого списка всего один индекс, как добраться до массива внутри списка или сразу записать данные в список с пятью индексами? вот фрагмент кода:
public class ReaderClass {
private void printFileContent(InputStream is) throws IOException {
try (Scanner scanner = new Scanner(is)) {
List<City> cityList;
while (scanner.hasNextLine()) {
String[] splitLine = scanner.nextLine().split(";");
cityList = Arrays.asList(new City(splitLine[1], splitLine[2], splitLine[3], splitLine[4], splitLine[5]));
System.out.println(cityList[1]); // будет ошибка problems with the filejava.lang.ArrayIndexOutOfBoundsException:
Index 1 out of bounds for length 1
}
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
А если так:
public class ReaderClass {
public static void main(String[] args) throws Exception {
List<City> cities = printFileContent(new FileInputStream("filename.csv"));
for (int i = 0; i < cities.size(); i+=1) {//здесь меняете шаг, например, i+=4
System.out.println(cities.get(i)); // здесь в консоль выводятся объекты, тут же в цикле можно искать максимальное число
}
}
private static List<City> printFileContent(InputStream is) throws IOException {
try (Scanner scanner = new Scanner(is)) {
List<City> cities = new ArrayList<>();
while (scanner.hasNextLine()) {
String[] splitLine = scanner.nextLine().split(";");
City city = new City(splitLine);
cities.add(city);
}
return cities;
}
}
}
class City {
private final Long id;
private final String name;
private final String republic;
private final String region;
private final Long population;
private final Integer year;
public City(String [] args) {
this.id = Long.valueOf(args[0]);
this.name = args[1];
this.republic = args[2];
this.region = args[3];
this.population = Long.valueOf(args[4]);
this.year = Integer.valueOf(args[5]);
}
public String getName() {
return name;
}
public String getRepublic() {
return republic;
}
public String getRegion() {
return region;
}
public Long getPopulation() {
return population;
}
public Integer getYear() {
return year;
}
@Override
public String toString() {
return "City{" + "name=" + name + ", republic=" + republic + ", region=" + region + ", population=" + population + ", year=" + year + '}';
}
}