TreeMap排序及使用Collections對List排序(主鍵可能重複的處理方法)

yunchat發表於2005-07-22

目前專案中一個head(object)會包含多個Dtl明細(object),需要依賴Dtl其中的幾個屬性進行排序。

TreeMap使用了key,而key不能重複,這樣就不能處理相同keydtl明細資料。

於是我查了下API ,發現可以使用 Colletions.sort實現該功能。需要實現Comparator介面。定義比較的規則。 如下事例:

[@more@]

目前專案中一個head會包含多個Dtl明細,需要依賴Dtl其中的幾個屬性進行排序。

使用TreeMap如下:

TreeMap myTree = new TreeMap();

Iterator itr = nkeiTranHd.getDtlIterator();

while (itr.hasNext()) {

nkeiTrnDtl = (NkeiTranDtl) itr.next();

myTree.put(nkeiTrnDtl.getKijoSyhnCd().getHnbn(), nkeiTrnDtl);

}

Iterator hnbn = myTree.keySet().iterator();

while (hnbn.hasNext()) {

nkeiTrnDtl = (NkeiTranDtl) myTree.get(hnbn.next());

TreeMap使用了key,而key不能重複,這樣就不能處理相同keydtl明細資料。

於是我查了下API

發現可以使用 Colletions.sort實現該功能。需要實現Comparator介面。定義比較的規則。

如下事例:

這樣即使dtl中的屬性是相同的也不會影響排序。

package jp.co.isetan.rb.regsykai.syukei.oltp;

import java.util.*;

/**

* Test

*

* @version $Revision:$ $Date:$

*/

public class Test {

  • public Test() {

super();

// TODO Auto-generated constructor stub

}

static class ItemComparator implements Comparator {

public int compare(Object element1, Object element2) {

TestBean item1 = (TestBean) element1;

TestBean item2 = (TestBean) element2;

return item1.getId().compareTo(item2.getId());

}

}

class TestBean {

String id;

String name;

public void setId(String newVal) {

id = newVal;

}

public String getId() {

return id;

}

public void setName(String newVal) {

name = newVal;

}

public String getName() {

return name;

}

}

public void testTreeMap() {

TestBean tb1 = new TestBean();

tb1.setId("2");

tb1.setName("2");

TestBean tb2 = new TestBean();

tb2.setId("3");

tb2.setName("3");

TestBean tb3 = new TestBean();

tb3.setId("2");

tb3.setName("2");

TestBean tb4 = new TestBean();

tb4.setId("1");

tb4.setName("1");

List tm= new ArrayList();

tm.add(tb1);

tm.add(tb2);

tm.add(tb3);

tm.add(tb4);

Collections.sort(tm, new ItemComparator());

Iterator it = tm.iterator();

while (it.hasNext()) {

TestBean tt = (TestBean)it.next();

System.out.println(tt.getId());

}

/* for (int i=0; i

System.out.println(((TestBean)tm.get(i)).getId());

}*/

}

public static void main(String[] args) {

Test t = new Test();

t.testTreeMap();

}

}

public static void main(String[] args) {

Test t = new Test();

t.testTreeMap();

}

}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/118026/viewspace-802769/,如需轉載,請註明出處,否則將追究法律責任。

相關文章