How to sort by two fields in Java using Comparable interface

preview_player
Показать описание
In this video I'm using two classes:

A Racer class, with four attributes. The important ones are the minutes and seconds. This attributes are used to store the time spent for the race.

The Race class has an ArrayList that contains all the racers. The objective is to show how we can order this ArrayList by the minutes and the seconds spent.
Рекомендации по теме
Комментарии
Автор

The XML file


<?xml version="1.0" encoding="UTF-8" ?>
<racers>
<racer>
<surname>Cruz Infantes</surname>
<name>Miquel</name>
<minutes>35</minutes>
<seconds>05</seconds>
</racer>


<racer>
<surname>Garrote Sapi</surname>
<name>Gerard</name>
<minutes>34</minutes>
<seconds>47</seconds>
</racer>


<racer>
<surname>Jones</surname>
<name>Dakota</name>
<minutes>33</minutes>
<seconds>34</seconds>
</racer>


<racer>
<surname>Mahboub</surname>
<name>Anas</name>
<minutes>31</minutes>
<seconds>13</seconds>
</racer>


<racer>
<surname>Mullera Rodriguez</surname>
<name>Angel</name>
<minutes>33</minutes>
<seconds>00</seconds>
</racer>


<racer>
<surname>Nour</surname>
<name>Radouane</name>
<minutes>31</minutes>
<seconds>26</seconds>
</racer>


<racer>
<surname>Oliveras Font</surname>
<name>Nan</name>
<minutes>31</minutes>
<seconds>07</seconds>
</racer>


<racer>
<surname>Rabionet Jorda</surname>
<name>Jordi</name>
<minutes>33</minutes>
<seconds>56</seconds>
</racer>


<racer>
<surname>Sanchez Pereira</surname>
<name>Xavier</name>
<minutes>35</minutes>
<seconds>19</seconds>
</racer>


<racer>
<surname>Spink</surname>
<name>Jenny</name>
<minutes>35</minutes>
<seconds>00</seconds>
</racer>


</racers>





Racer class


import java.util.Comparator;


public class Racer implements Comparable<Racer> {
private String name;
private String surname;
private int minutes;
private int seconds;


public Racer(String name, String surname, int minutes, int seconds) {
}

/*
public compareTo(Racer racer)
if returned value equals -1 object represented by this is smaller
if returned value equals 1 parameter object (racer) is smaller
*/




@Override
public int compareTo(Racer racer) {
if ||
this.getMinutes() == racer.getMinutes() &&

return -1; // current object has better time
else
if &&
return 0;
else return 1;
}


// SETTERS
public void setName(String name) { this.name = name; }
public void setSurname(String surname) { this.surname = surname; }
public void setMinutes(int minutes) { this.minutes = minutes; }
public void setSeconds(int seconds) { this.seconds = seconds; }


// GETTERS
public String getName() { return name; }
public String getSurname() { return surname; }
public int getMinutes() { return minutes; }
public int getSeconds() { return seconds; }
}





Race class


import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


import
import
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;


public class Race {
private ArrayList<Racer> racers = new ArrayList<>();


public Race() {
this.readXML();
this.classification();
}


public void classification() {
Collections.sort(racers);
this.showRacers();
}


private void showRacers() {
header();
detail();
}


private void detail() {


for(int i=0;i<racers.size();i++) {
line(i);
}
}


private void line(int i) {
String seconds, position;


if seconds = "0" + racers.get(i).getSeconds();
else seconds = "" + racers.get(i).getSeconds();


position = (i+1) + "\t\t ";


System.out.println(
position +
racers.get(i).getMinutes() + ":" +
seconds + "\t\t" +
racers.get(i).getSurname() + ", " +
racers.get(i).getName());
}




private void header() {
System.out.println("Position Time \t\tName");
for(int i=0;i<8;i++) System.out.print("=");
System.out.print(" ");
for(int i=0;i<8;i++) System.out.print("=");
System.out.print("\t");
for(int i=0;i<50;i++) System.out.print("=");
System.out.println();
}


private void readXML() {
try {
File xmlFile = new File("racers.xml");


DocumentBuilderFactory documentBuilderFactory =
DocumentBuilder documentBuilder =
Document document =





NodeList racerCol =
Node racer = null;


for (int {
racer = racerCol.item(i);
if (racer.getNodeType() == Node.ELEMENT_NODE) {
Element racerData = (Element) racer;
racers.add(new Racer(
racerData.getElementsByTagName("name").item(0).getTextContent(),
racerData.getElementsByTagName("surname").item(0).getTextContent(),
Integer.parseInt(racerData.getElementsByTagName("minutes").item(0).getTextContent()),

));
}


}







Main program




public class Main {


public static void main(String[] args) {
Race race = new Race();
}
}

MiquelBoada
welcome to shbcf.ru