Я начинающий Java. У меня есть файл CSV в формате (Город; Пол; Возраст). например, как я могу посчитать, сколько мужчин в возрасте до 40 лет живут в определенном городе. Какие-либо предложения?

public void method() throws IOException {
     int count = 0;
     FileReader fr = new FileReader(file);
     BufferedReader br = new BufferedReader(fr);
     String line;
     while((line = br.readLine())!= null){
         br.readLine();
         String [] l = line.split(";");
          if(l[0].equals("CityA")&&l[1].equals("M")&&l[2].equals("<40")) {
              count++;
          }    
      }
}
0
K-Mei 1 Май 2019 в 19:00

3 ответа

Лучший ответ

Вы пытаетесь сделать "string".equals("<40"), который проверяет, эквивалентна ли строка "string" строке "<40", а не если это значение меньше 40.

Попробуйте преобразовать строку в l[2] в целое число, а затем выполните проверку:

int age = Integer.parseInt(l[2]);
if (l[0].equals("CityA") && l[1].equals("M") && age < 40) {
    count++;
}
0
Matt 1 Май 2019 в 16:12

Если у вас есть line = br.readline() в начале времени, вам также не понадобится второй оператор br.readline(); внутри времени. Вы не получаете правильный ответ? Вы пытаетесь улучшить стиль кода?

0
Matt 1 Май 2019 в 16:16

Может быть сделано с потоковым API:

long count = Files.lines(Paths.get(PATH_TO_CSV))
            .map(s -> s.split(";"))
            .filter(arr -> arr[0].equals("CityA"))
            .filter(arr -> arr[1].equals("M"))
            .filter(arr -> Integer.parseInt(arr[2]) < 40)
            .count();

System.out.println(count);
1
Ruslan 1 Май 2019 в 16:11