import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Main {
	public static void main(String[] args) throws Exception {
		List<NotificationCnavOP> notificationCnavOPList = new ArrayList<>(
				Arrays.asList(
						new NotificationCnavOP(1, "01/01/2000", 1), 
						new NotificationCnavOP(2, "01/01/2001", 2),
						new NotificationCnavOP(2, "01/01/2002", 3), 
						new NotificationCnavOP(2, "01/01/2001", 2)));

		List<NotificationCnavOP> result = 
				notificationCnavOPList
				.stream()
				.sorted(Comparator.comparing(NotificationCnavOP::getId)
						.thenComparing(e -> LocalDate.parse(e.getDate(), DateTimeFormatter.ofPattern("dd/MM/yyyy")))
						.thenComparing(NotificationCnavOP::getCxalap))
				.collect(Collectors.toMap(NotificationCnavOP::getId, Function.identity(), (e1, e2) -> e1))
				.values()
				.stream()
				.collect(Collectors.toList());

		System.out.println(result);
	}
}

class NotificationCnavOP {
	private int id;
	private String date;
	private int cxalap;

	public NotificationCnavOP(int id, String date, int cxalap) {
		this.id = id;
		this.date = date;
		this.cxalap = cxalap;
	}

	public int getId() {
		return id;
	}

	public String getDate() {
		return date;
	}

	public int getCxalap() {
		return cxalap;
	}

	@Override
	public String toString() {
		return "[" + id + ", " + date + ", " + cxalap + "]";
	}
}