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.