Davtyan Avo
Davtyan Avo | Репутация: 97 (Без статуса) 9 июня 2008 в 14:29
Как можно сортировать объекты в java?
C помощью вектора или листа?
Теги:
.net, , actionscript, ada, ado.net ...еще >>
D D
D D | Репутация: 115 (Кандидат) 9 июня 2008 в 15:15

1) java.util.Collections.sort( List );
// all elements in Collection must be Comparable

or
2) java.util.Collections.sort( List , Comparator );

Валерий Седых
Валерий Седых | Репутация: 100 (Кандидат) 9 июня 2008 в 15:21

Вот пример сортировки дерева DOM с помощью TreeSet:
package ru.vsedykh.SiteMap.EditXML;

import java.util.Calendar;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.StringTokenizer;
import java.util.TreeSet;
import org.jdom.Document;
import org.jdom.Element;

/**
* Класс сортирует DOM tree на основе полученных параметров
*/
public class Sorter {

/**
* Функция сортирует DOM Tree на основе параметра sortBy
*@param doc ссылка на объектную модель sitemap.xml
*@param sortBy параметр сортировки
*/
public void sort(Document doc, String sortBy) {
final String sortByForComparator = sortBy;
Comparator c;
if (sortByForComparator.equals("loc")) {
c = new Comparator() {

public int compare(Object o1, Object o2) {
String str1 = "";
String str2 = "";
try {
str1 = ((Element) o1).getChild(sortByForComparator).getText();
} catch (Exception e) {

}
try {
str2 = ((Element) o2).getChild(sortByForComparator).getText();
} catch (Exception e) {

}
int k = str1.compareToIgnoreCase(str2);
if (k == 0) {
str1 = ((Element) o1).getChild("loc").getText();
str2 = ((Element) o2).getChild("loc").getText();
k = str1.compareToIgnoreCase(str2);
return k;
}
return k;
}
};
}

Element root = doc.getRootElement();
List urls = root.getChildren("url");

TreeSet sortUrls = new TreeSet(c);
sortUrls.addAll(urls);
urls.removeAll(urls);
urls.addAll(sortUrls);
}
}

Надо только реализовать свой компаратор.

D D
D D | Репутация: 115 (Кандидат) 9 июня 2008 в 15:26

see: java.util.Comparator interface example (java 1.5) :List list = new ArrayList(); list.add(20); list.add(10); list.add("15"); Comparator comparator = new Comparator() { public int compare(Object o1, Object o2) { if (o1 instanceof String ) o1 = Integer.parseInt((String) o1); if (o2 instanceof String ) o2 = Integer.parseInt((String) o2); if ((Integer) o1 < (Integer) o2) return -1; if ((Integer) o1 > (Integer) o2) return 1; return 0; } }; Collections.sort(list, comparator); System.out.println( Arrays.toString(list.toArray()) );