Witam mam taki problem dostalem zadanie w ktorym mam posortowac kolekcje dowolnego typu implementujacego interface List (kolekcja ta zawiera obiekty typu String). Wszystko byloby proste bo mozna korzystac z klasy Collections i funkcji sort i za pomoca tego posortuje rosnaco i malejaco , problem zaczyna sie kiedy mam posortowac ta kolekcje wzgledem drugich znakow kazdego z obiektow kolekcjii. Czy moglby mi ktos pomoc ??
cos w stylu
public class Komparator implements Comparator {
public int compare(Object o1, Object o2) {
String s1 = (String) o1;
String s2 = (String) o2;
if (s1.charAt(1) < s2.charAt(1)) {
return -1;
}
if (s1.charAt(1) > s2.charAt(1)) {
return 1;
}
return 0;
}
}
i robisz liste
List<String> ls = new LinkedList<String>(new Komparator());
Deklarujemy komparator malejący. Zwykłego nie musimy, gdyż ten jest standardowo używany przez sort().
public class DescComparator implements Comparator<String>{
public int compare(String s1, String s2) {
return s2.compareTo(s1);
}
}
Przykład użycia:
List<String> l = Arrays.asList("ab","a","fgd","aa","fd");
Collections.sort(l);
System.out.println(l);
Collections.sort(l, new DescComparator());
System.out.println(l);
dzieki za pomoc ale i tak sie nie udalo. zrobilem taki komparator jak mi m1r4cu napisales ale nie moge z niego korzystac caly czas cos sie nie chce skompilowac to kod mojego programu:
List<String> sor = new ArrayList<String>();
for(int j=0;j<htab.size();j++){
String wyr;
wyr = htab.get(j);
if (wyr.length()>1)
sor.add(wyr);
}
System.out.println("sor >>>>"+sor.toString());
Collections.sort(sor);
System.out.println("sor rosnaco >>>>"+sor.toString());
Collections.reverse(sor);
System.out.println("sor malejaco >>>>"+sor.toString());
Collections.sort(sor,);
System.out.println("sor rosnaco po drugiej>>>>"+sor.toString());
}
}
h.tab to kolekcji typu HashTable z leksemami pobranymi z pliku z ktorej przekopiowac mialem do dowolnej kolekcji implementujacej List
class Komparator implements Comparator {
public int compare(Object o1, Object o2) {
String s1 = (String) o1;
String s2 = (String) o2;
if (s1.charAt(1) < s2.charAt(1)) {
return -1;
}
if (s1.charAt(1) > s2.charAt(1)) {
return 1;
}
return 0;
}
}
napisalem taki komparator no i co dalej mozna zrobic ?? macie jakies pomysly ?? z gory wielkie dzieki za pomoc.
pzdr
Tu jest błąd(, na końcu): Collections.sort(sor,);
Czyli chodzi TYLKO o drugie znaki?
Jeżeli tak, to nie zrozumiałem.
Btw. można to zapisać prościej:
public class SecondLetterComparator implements Comparator<String>{
public int compare(String s1, String s2) {
return s1.charAt(1) - s2.charAt(1);
}
}
no wiem tam powinienem wstawic komparator ale na tyle sposobow co probowalem to juz mam dosc :/ nie wiem czemu to nie chce sie w tym momecie skompilowac.
Usunąłeś przecinek z "Collections.sort(sor,);" ?
Jaką masz wersję JDK?
Czy kompilujesz w trybie zgodności z jakąś poprzenią wersją?
Dodaj import:
import java.util.*;
I najważniejsze:
<font size="3">Jaki dokładnie błąd wyświetla kompilator? </span>