jak zaimplementowac interface Comparator

0

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 ??

0

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

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

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

0

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

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.

0

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>

1 użytkowników online, w tym zalogowanych: 0, gości: 1