Это очень быстрый код, но, надеюсь, он укажет вам правильное направление.
На вашем месте я бы сначала создал очень простой объект участника:
public class Participant implements Comparable {
String time;
String sex;
public Participant(String time, String sex) {
this.time = time;
this.sex = sex;
}
public String getTime() {
return time;
}
public String getSex() {
return sex;
}
@Override
public int compareTo(Object o) {
return this.getTime().compareTo(((Participant) o).getTime());
}
}
Наш объект Участник имеет понятие времени и пола, очень простое. Мы также хотим, чтобы он реализовал Comparable и переопределенный метод compareTo()
- это необходимо, чтобы мы могли сравнивать наши объекты-участники по времени.
Далее, для каждой строки в файле (кроме первой, поскольку это просто показывает количество участников), давайте создадим соответствующие объекты участников и добавим их в ArrayList. Я собираюсь сделать это с помощью BufferedReader:
BufferedReader in = new BufferedReader(new FileReader("...your-file..."));
ArrayList<Participant> participants = new ArrayList<>();
String str;
//skip first line
in.readLine();
while ((str = in.readLine()) != null){
//Split every line entry by space, so split e.g. 49 F into time 49 and sex F
String[] splitString = str.split(" ");
Participant p = new Participant(splitString[0], splitString[1]);
participants.add(p);
}
Затем, давайте отсортируем ArrayList наших участников:
Collections.sort(participants);
Далее, мы сразу можем сказать, у кого самое быстрое время - это будет первым в ArrayList, независимо от пола. После того, как мы получим самое быстрое время, мы можем удалить его из ArrayList, поскольку мы больше не заботимся о нем:
System.out.println("Fastest Time: " + participants.get(0).getTime());
participants.remove(participants.get(0));
Далее, нам нужно решить, что будет следующим самым быстрым временем - это мужчина или Женское самое быстрое время? Давайте создадим отдельный приватный метод для этого:
private static void determineFastestSexTime(ArrayList<Participant> participants) {
if (participants.get(0).getSex().equals("M")) {
System.out.println("Fastest Male Time: " + participants.get(0).getTime());
} else {
System.out.println("Fastest Female Time: " + participants.get(0).getTime());
}
}
Затем используйте его следующим образом:
determineFastestSexTime(participants);
Как только мы получим это, мы можем удалить все остальные времена для этого пола, так как они будет медленнее, чем самое быстрое (половое) время:
participants.removeIf(p -> (p.getSex().equals(participants.get(0).getSex())));
Поэтому у нас остается только мужской список или женский список участников. Тогда легко - захватите самое быстрое время отдыха:
determineFastestSexTime(participants);
Вывод:
Fastest Time: 43
Fastest Female Time: 48
Fastest Male Time: 50