The program defines a Route class that implements the Comparable interface. Write a method public static Route longestRoute(ArrayList routes) which returns the longest route in the list. The method should not have side effects - the list must not be changed! Note also that the Route class does not have get methods. import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Random; public class Test{ public static void main(String[] args){ final Random r = new Random(); String[] c1 = "London Manchester Liverpool Leeds Sheffield Bristol Birmingham Leicester Newcastle".split(" "); String[] c2 = "Hogwarts Camelot Avalon El Dorado Shangri-La Atlantis Utopia Eden Olympus".split(" "); ArrayList a1 = new ArrayList<>(Arrays.asList(c1)); ArrayList a2 = new ArrayList<>(Arrays.asList(c2)); ArrayList distances = new ArrayList<>(); int distance = r.nextInt(50) + 10; for (int i = 0; i < 9; i++) { distances.add(distance); distance += r.nextInt(50) + 1; } ArrayList routes = new ArrayList<>(); for (int i = 0; i < 8; i++) { String city1 = a1.remove(r.nextInt(a1.size())); String city2 = a2.remove(r.nextInt(a2.size())); routes.add(new Route(city1, city2, distances.remove(r.nextInt(distances.size())))); } System.out.println("All routes: "); routes.stream().forEach(route -> System.out.println("" + route)); System.out.println("Longest route: "); System.out.println(longestRoute(routes)); System.out.println("List now:"); routes.stream().forEach(route -> System.out.println(route)); } //ADD public static Route longestRoute(ArrayList routes) { // https://www.baeldung.com/java-copy-list-to-another // copy the list ArrayList copy = new ArrayList<>(routes); // sort the list Collections.sort(copy); // https://stackoverflow.com/questions/687833/how-to-get-the-last-value-of-an-arraylist // return the last element return copy.get(copy.size() - 1); } } class Route implements Comparable { private String startPoint; private String endPoint; private int distance; // CONSTRUCTOR public Route(String startPoint, String endPoint, int distance) { this.startPoint = startPoint; this.endPoint = endPoint; this.distance = distance; } // UPDATE HOW WE USE 'compareTo' WHEN SORTING @Override public int compareTo(Route other) { return this.distance - other.distance; } @Override public String toString() { return startPoint + " - " + endPoint + ": " + distance + " km."; } } All routes: Bristol - El: 108 km. London - Shangri-La: 155 km. Birmingham - Atlantis: 66 km. Manchester - Eden: 240 km. Liverpool - Olympus: 258 km. Sheffield - Avalon: 27 km. Leicester - Camelot: 103 km. Newcastle - Hogwarts: 238 km. Longest route: Liverpool - Olympus: 258 km. List now: Bristol - El: 108 km. London - Shangri-La: 155 km. Birmingham - Atlantis: 66 km. Manchester - Eden: 240 km. Liverpool - Olympus: 258 km. Sheffield - Avalon: 27 km. Leicester - Camelot: 103 km. Newcastle - Hogwarts: 238 km.