package jcf_set.exercise;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class EsercizioParole {
	
	/*
	 * EX1 del 27-01-2026 (I Appello)
	 * Si scriva un metodo 
	 * public List<String> DifferentWordsList(List<String>)
	 * che, data in input una lista di stringhe, restituisce una 
	 * nuova lista priva di elementi duplicati, contenente tutte le
	 * stringhe distinte di list e ordinata per lunghezze decrescenti 
	 * (a parità di lunghezza ordinamento lessicografico crescente)
	 */
	public List<String> DifferentWordsList(List<String> lista) {
		Set<String> listaOrd = new TreeSet<String>(new Comparator<String>() {
			@Override
			public int compare(String s1, String s2) {
				int l1 = s1.length();
				int l2 = s2.length();
				
				int cmp = Integer.compare(l2, l1);
				
				if (cmp != 0) return cmp;
				
				return s1.compareTo(s2);
			}
		});
		
		if (lista == null || lista.isEmpty()) return new ArrayList<String>(listaOrd);
		
		Iterator<String> it = lista.iterator();
		while (it.hasNext()) {
			listaOrd.add(it.next());
		}
		
		return new ArrayList<String>(listaOrd);		
	}
	
}
