简体   繁体   中英

TreeSet how to corectly display data using iterator

I'm learning about TreeSet and using this collection but I hava a little problem with using iterator... I can't display data ... And i have second question.. How can i influance at compare my data? ex: now in my class i compare names field (imie) but in case surname i would like to compare surnames (nazwisko). How can i do this? I will be grateful for your answer! PS: Sorry for my eng. This is my code:

static String nazwisko, imie;
static int idpracownika, pensja;
static void run(){
    TreeSet<Pracownicy>  list = new TreeSet<Pracownicy>();
    Iterator<Pracownicy> iterator = list.iterator();

    while(true){
        String opcja = JOptionPane.showInputDialog("Podaj: Nazwisko, Imiê, idPracownika, Pensjê");
        //StringTokenizer st = new StringTokenizer(opcja);
        switch(opcja){
        case ("exit"):
            System.exit(0);
            break;
        case("name"):
            System.out.println("Imiona:");
            //while (iterator.hasNext()){
            System.out.println(list);
            break;
        case("surname"):
            System.out.println("Nazwiska:");
            while(iterator.hasNext()){
                System.out.println(iterator.next().getName());  
            }
            break;

        default:


            String[] bufor;
            bufor = opcja.split(" ");
            imie = bufor[0];
            nazwisko = bufor[1];
            idpracownika = Integer.parseInt(bufor[2]);
            pensja = Integer.parseInt(bufor[3]); 

            list.add(new Pracownicy(nazwisko, imie, idpracownika, pensja));
        break;  
        }
        }



public class Pracownicy implements Comparable<Pracownicy> {

    public String nazwisko;
    public String imie;
    public int idPracownika;
    public int pensja;


    Pracownicy(String nazwisko, String imie, int idPracownika, int pensja){
        this.nazwisko=nazwisko;
        this.imie=imie;
        this.idPracownika=idPracownika;
        this.pensja=pensja;
    }

    public String getName()     {   return imie; }
    public String getSurname()  {   return nazwisko; }
    @Override
    public int compareTo(Pracownicy o) {    
        return this.imie.compareTo(o.imie);
    }

    public String toString(){
        return nazwisko + " " + imie + " " + idPracownika + " " + pensja + "\n";
    }
}

I would like to compare surnames

@Override
public int compareTo(Pracownicy o) {    
    int firstNameEqual = this.imie.compareTo(o.imie);
    // if first name is equal then compare on surname
    if(firstNameEqual==0){
         return this.nazwisko.compareTo(o.nazwisko);
    }else{
         return firstNameEqual;
    }
}

You can create different Comparator to sort as per your requirement. Finally use Collections.sort() to sort a List .

Sample code:

TreeSet<Pracownicy> set = new TreeSet<Pracownicy>();

Comparator<Pracownicy> surnameComparator = new Comparator<Pracownicy>() {

    @Override
    public int compare(Pracownicy o1, Pracownicy o2) {
        return o1.nazwisko.compareTo(o2.nazwisko);
    }
};

Comparator<Pracownicy> firstNameComparator = new Comparator<Pracownicy>() {

    @Override
    public int compare(Pracownicy o1, Pracownicy o2) {
        return o1.imie.compareTo(o2.imie);
    }
};

List<Pracownicy> list = new ArrayList<Pracownicy>(set);

// sort by surname
Collections.sort(list, surnameComparator);

// sort by first name
Collections.sort(list, firstNameComparator);

How to iterate the Set ?

Iterator<Pracownicy> iterator = set.iterator();
Pracownicy pracownicy = null;
while (iterator.hasNext()) {
    pracownicy = iterator.next();
    ...
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM