package ch.usi.inf.ajp22; import java.util.Comparator; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; public class Album { private List tracks; private Artist artist; private String title; private static Comparator byDuration; public Album(List songs, Artist artist, String title) { this.tracks = songs; this.artist = artist; this.title = title; } public List getTracks() { return tracks; } public void setTracks(List tracks) { this.tracks = tracks; } public Artist getArtist() { return artist; } public void setArtist(Artist artist) { this.artist = artist; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } /** * 3 Points * create a public Optional method called "searchLongestSong" that * return the longest Track on the album. * input: void * output: an Optional */ public Optional searchLongestSong() { return this.tracks.stream() .max(Comparator.comparingInt(Track::getLength)); } /** * 3 Points * create a public List method called "orderSongByTitle" that * return the track list ordered lexicographically using the title field. * input: void * output: a List */ public List orderSongByTitle() { // note: we assume lexicographical order requires letter case to be ignored return this.tracks.stream() .sorted((a, b) -> String.CASE_INSENSITIVE_ORDER.compare(a.getTitle(), b.getTitle())) .collect(Collectors.toList()); } @Override public String toString() { return "ch.usi.inf.ajp22.Album{" + "tracks=" + tracks + ", artist='" + artist.getName() + '\'' + ", title='" + title + '\'' + '}'; } }