Na Unixech se to dela kolonou "sort | uniq -c |sort -n" :-)
Ale jestli to musi byt v Jave, tak bych
pouzil Hashmap tak jak mate pouzitou Hashtable,
a *potom* bych z ni ziskal polozky a setridil je
podle hodnot (nikoliv klicu), tj.
HashMap<String,Integer> mapa = ...
... atd tak jak to mate ...
Set<Map.Entry<String,Integer> polozky = mapa.entrySet();
Map.Entry[] pole = polozky.toArray(new Map.Entry[polozky.size()]);
Arrays.sort(pole, new Comparator<Map.Entry<String,Integer>>() {
public int compare(Map.Entry<String,Integer> e1,
Map.Entry<String,Integer> e2) {
return e1.getValue().compareTo(e2.getValue()));
}
});
Makub
BJ napsal(a):
Dobry den
Mam LOG soubor a ten chci analyzovat.
Struktura:
/var/www/xxx/stranka1.html
/var/www/xxx/stranka2.html
/var/www/xxx/stranka1.html
/var/www/xxx/stranka1.html
/var/www/xxx/stranka5.html
...
A ja potrebuji abych ve vysledku zjistil ze:
/var/www/xxx/stranka1.html - 3
/var/www/xxx/stranka2.html - 1
/var/www/xxx/stranka5.html - 1
Zkousel jsem laborovat s TreeSet a Hashtable.
U Hashtable jsem se dostal az do naplneni ale nevim jak jednoduse projit tuto
strukturu (nejlepe s volbou setrideni podle nazvu souboru (key), nebo poctem
souboru (value).
Kod na naplneni Hashtable vypada takhle:
String line = "";
Hashtable<String, Integer> set = new Hashtable<String, Integer> ();
while ((line = r.readLine()) != null) {
if (line.trim().compareTo("") == 0) continue;
if (set.containsKey(line)) {
set.put(line, (Integer)set.get(line)+1);
} else {
set.put(line, 1);
}
}
Napadla me cesta ze bych si vratil seznam klicu (set.keySet()) ale nejsem si
jist zda se nedrbu pravou rukou za levym uchem a neresi to samotne trideni.
Dik za rady ci pripadnou pomoc.
BJ
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno Martin Kuba
Institute of Computer Science email: [EMAIL PROTECTED]
Masaryk University http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775
--------------------------------------------------------------