TreeSet如何使用迭代器正确显示数据

时间:2014-05-04 20:19:33

标签: java

我正在学习TreeSet并使用这个集合,但是使用迭代器我有一点问题......我无法显示数据...... 我有第二个问题..我如何比较我的数据? ex:现在在我的班级我比较名字字段(imie)但是如果姓氏我想比较姓氏(nazwisko)。我怎样才能做到这一点? 我将非常感谢你的回答! PS:对不起我的工程师。 这是我的代码:

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";
    }
}

1 个答案:

答案 0 :(得分:0)

我想比较一下姓氏

@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;
    }
}

您可以根据需要创建不同的Comparator进行排序。最后使用Collections.sort()List进行排序。

示例代码:

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);

如何迭代Set

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