ho queste classi:
[PHP]public interface Articolo {

public int getCostoUnitario();

public String getCodice();
}/PHP]

Codice PHP:
public class Disco implements Articolo {
    private 
String codice;
    private 
int costoUnitario;

    public 
Disco(String codiceint costoUnitario) {
        
this.codice codice;
        
this.costoUnitario costoUnitario;
    }

    public 
String getCodice() { 
        return 
this.codice;
    }

    public 
int getCostoUnitario() {
        return 
this.costoUnitario;
    }

    public 
boolean equals(Object o) {
        
Disco d = (Disco)o;
        return 
this.codice.equals(d.getCodice());
    }

    public 
int hashCode() {
        return 
this.codice.hashCode();
    }
    
    public 
String toString() {
        return 
"Disco: " this.codice "," this.costoUnitario;
    }

Codice PHP:
public class Libro implements Articolo {
    private 
String codice;
    private 
int costoUnitario;

    public 
Libro(String codiceint costoUnitario) {
        
this.codice codice;
        
this.costoUnitario costoUnitario;
    }
    
    public 
String getCodice() {
        return 
this.codice;
    }
    
    public 
int getCostoUnitario() {
        return 
this.costoUnitario;
    }
    
    public 
boolean equals(Object o) {
        
Libro l = (Libro)o;
        return 
this.codice.equals(l.getCodice());
    }
    
    public 
int hashCode() {
        return 
this.codice.hashCode(); 
    }
    
    public 
String toString() {
        return 
"Libro: " this.codice "," this.costoUnitario;
    }

Codice PHP:
import java.util.*;

public class 
ComparatorePerCosto implements Comparator<Articolo> {
    
    public 
int compare(Articolo a1,Articolo a2) {
        return 
a1.getCostoUnitario()-a2.getCostoUnitario();
    }

Codice PHP:
import java.util.*;

public class 
Magazzino {
    private 
Map<Articolo,Integerarticolo2quantita;

    public 
Magazzino() {
        
this.articolo2quantita = new HashMap<Articolo,Integer>();
    }
    
    public 
void aggiungiArticolo(Articolo articoloint quantita) {
        
this.articolo2quantita.put(articolo,quantita);
    }
    
    public 
Set<ArticologetArticoli() {
        return 
this.articolo2quantita.keySet();    
    }
    
    public 
int calcolaValoreMagazzino() {
        
int valore 0;
        
Set<Articoloarticoli this.getArticoli();
        for (
Articolo a articoli) {
            
int quantitaDiA this.articolo2quantita.get(a);
            
valore += a.getCostoUnitario() * quantitaDiA;
        }
        
// DOMANDA 2: scrivere codice mancante
        
return valore;
    }
    
    public 
Map<Integer,Set<String>> articoliEconomici(int soglia) {
        
// costo -> insieme di codici di articoli con il costo della chiave
        
Map<Integer,Set<String>> costo2insiemeCodiceArticoli = new HashMap<Integer,Set<String>>();
        
Set<Stringcodici = new HashSet<String>();
        for (
Articolo a this.getArticoli()) {
            if (
a.getCostoUnitario() < soglia) {
                
int costoOk a.getCostoUnitario();
                
codici.add(a.getCodice());
                
costo2insiemeCodiceArticoli.put(costoOk,codici);
            }
        }
        
        
// DOMANDA 3: scrivere codice mancante
        
return costo2insiemeCodiceArticoli
    }
    
    public List<
ArticoloarticoliOrdinatiPerCosto() {
        List<
ArticololistaArticoli = new LinkedList<Articolo>();
        
// DOMANDA 4: scrivere codice mancante
        
for (Articolo a this.getArticoli()) {
            
listaArticoli.add(a);
        }
        
Collections.sort(listaArticoli,new ComparatorePerCosto());
        return 
listaArticoli;
    }
    
    public static 
void main(String[] args) {
        
Articolo libro1 = new Libro("090",30);
        
Articolo disco1 = new Disco("080",20);
        
Articolo disco2 = new Disco("070",5);
        
Articolo libro2 = new Libro("050",6);
        
Articolo libro3 = new Libro("030",10);
        
Articolo disco3 = new Disco("040",6);
        
Magazzino magazzino = new Magazzino();
        
magazzino.aggiungiArticolo(libro1,10);
        
magazzino.aggiungiArticolo(disco1,20);
        
magazzino.aggiungiArticolo(disco2,14);
        
magazzino.aggiungiArticolo(libro2,12);
        
magazzino.aggiungiArticolo(libro3,12);
        
magazzino.aggiungiArticolo(disco3,10);
        
System.out.println(magazzino.getArticoli());
        
System.out.println(magazzino.calcolaValoreMagazzino());
        
System.out.println(magazzino.articoliEconomici(10));
        
System.out.println(magazzino.articoliOrdinatiPerCosto());
    }

il metodo che non va correttamente è questo:
public Map<Integer,Set<String>> articoliEconomici(int soglia)
La domanda dell'esercizio dice:
Scrivere il codice del metodo Map<Integer,Set<String>> articoliEconomici(int soglia) questo metodo
restituisce in una mappa gli articoli il cui costo unitario è inferiore ad una soglia (passata come parametro al metodo). Chiave
della mappa è un intero, che rappresenta un costo unitario; la mappa associa alla chiave un insieme dei codici degli articoli
che hanno costo unitario pari a quello della chiave (che comunque è inferiore alla soglia).
Nel MAIN ho fatto alcune prove, e con System.out.println(magazzino.articoliEconomici(10) ); dovrebbe stampare {5=[070] , 6=[050,040]} .Invece mi stampa {5=[040,050,070] , 6=[040,050,070]}. Non so come modificare il metodo articoliEconomici(int soglia)...
spero mi aiuterete...