Wyeliminowanie powtarzających się elementów w comboboxie

0

Mam następujący problem do comboboxa wrzucam sobie nazwy miast i chciałbym, żeby się one nie powtarzały.
Jak to najlepiej zrobić, w trakcie dodawania, czy może na koniec ?
Może znacie jakies sensowne rozwiązanie bo mi przychodzi tylko na mysl w pętli porównywanie każdego elementu do obecnie dodawanego co wydaje mi się mało zoopytmalizowanym algorytmem

1

Trzymaj gdzies na boku Set (zbior) i do niego najpierw dodawaj. Jesli set.add(miasto) zwroci false, znaczy to ze juz wczesniej taka nazwa zostala dodana, i nie musisz nic dodawac, lecisz nastepna iteracje w petli. Wymaga dodatkowego zbioru, ale powinno byc szybkie.

0

A najlepiej postaraj sie dokonac takiej pre-selekcji zanim tworzysz kombo. Np, jesli wczytujesz miasta z bazy, to zrob 'select distinct', jesli wczytujesz z pliku, to zrob ten myk z setem w czasie wczytywania, abys robil to raz, a nie za kazdym razem dla kazdego kombosa.

0

wczytuję z bazy, że też o tym nie pomyslalem, oba pomysły są dobre ale skorzystam zapewne z distinct, DZIĘKI :) !

0

Jeśli baza nie ma ograniczeń przy wprowadzaniu danych, to jeszcze trzeba się zabezpieczyć przed różnymi miastami "Kraków" i "KRAKÓW". Przy użyciu DISTINCT przydatna będzie funkcja SQL_UCASE, przy użyciu klasy Set warto do pomocniczego zbioru wrzucać miasto.toUpperCase(). Jeżeli estetycznie nie odpowiadają Ci nazwy miast pisane dużymi literami (mi nie odpowiadają), to warto napisać metodę, która większość dużych liter zamienia na małe ("TARNOWSKIE GÓRY" => "Tarnowskie Góry").

0

Dzięki bo za sugestię, tak się zastanawiam czy w Oraclu nie ma takiej funkcji, która rozpoczyna wyraz od dużej litery, jesli nie to co mi zostaje ? PL/SQL ?

0

Możesz tak

SELECT DISTINCT UCASE(miasto) FROM ....

i przy wrzucaniu do ComboBoxa przekształcasz (Klasa String nie ma odpowiedniej metody, musisz ją sam napisać). Ze znanych mi języków odpowiednią metodę (title) ma Python.

0

Nudziłem się na dyżurze.

    private String capitalize(String txt)
    {
        return txt.substring(0,1).toUpperCase()+txt.substring(1).toLowerCase();
    }
    //------------------------
    private String title(String txt)
    {
        StringBuilder sb=new StringBuilder("");
        StringTokenizer st=new StringTokenizer(txt);
        while(st.hasMoreTokens())
        {
            sb.append(capitalize(st.nextToken())+" ");
        }
        return sb.toString().trim();
    }

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