Progettare una classe generica i cui oggetti rappresentino una collezione di coppie (x, y) senza ripetizioni. La classe dispone dei seguenti
metodi:
- aggiungi: data in input una coppia (x, y), la aggiunge alla collezione.
- elimina: data in input una coppia (x, y), la elimina se è presente.
- getCoppiePerX: data la coordinata x, fornisce l'insieme delle coppie aventi la coordinata x specificata;
- toString: restituisce una rappresentazione a stringa della collezione di coppie analoga a quella del file fornito in ingresso, in cui i valori x delle coppie sono ordinati secondo l'ordinamento naturale del tipo di x.
Inizialmente avevo pensato di creare una classe Coppia generica, ossia:
=== COPPIA ====
public class Coppia<T,S> {
private T x;
private S y;
public Coppia(T x, S y){
this.x=x;
this.y=y;
}
public T getX(){return x;}
public S getY(){return y;}
}
Poi creare una classe MultiCoppia che contiene una Collection di elementi di tipo Coppia generici.
Però così facendo mi da un problema di compilazione.
public class MultiCoppia <T,S> {
private Collection<Coppia<T,S>> l;
public MultiCoppia(Collection<Coppia<T,S>> l){
this.l = l;
}
public void aggiungi(Coppia<T,S> c){
if(c!=null) l.add(c);
}
public void elimina(Coppia<T,S> c){
l.remove(c);
}
public Set<Coppia<T,S>> getCoppiePerX(T x){
return l.stream().filter(xx -> xx.getX().equals(x)).collect(Collectors.toSet());
}
public String toString(){
String s="";
for(Coppia c : l){
s+=c.getX()+","+c.getY();
s+="\n";
}
return s;
}
Non pensavo fosse tanto difficile lavorare con i generici, sono molto delicati.
Qualche consiglio su come strutturare il problema?
Ciao