将set集合转为list并对对象进行排序
之前用hibernate的时候,遇到一对多的表结构。比如班级(class),学生(student)时,hibernate都是将student作为一个set集合放在班级对象之中,这是无序的,而我们往往要根据student的id或者分数进行排序。以前采用的办法很笨,遍历set,再借助数组将其按照所要求的顺序加入到list中。这两天发现一种比较好的方法如下:
public class Stude implements Comparable<Object> {private String id;private String name;private String address;public Stude() {}public Stude(String id,String name,String address) {this.id=id;this.name=name;this.address=address;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic int compareTo(Object arg0) {Stude stu1=(Stude)arg0;/*根据id排序 * int stu0Id=Integer.parseInt(id);int stu1Id=Integer.parseInt(stu1.id);return stu0Id>stu1Id?1:(stu0Id==stu1Id?0:-1);*/return name.compareTo(stu1.getName());//根据name排序}}
import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;import java.util.List;import java.util.Set;public class Test {public static void main(String[] args) {Stude stu=new Stude("1","gao","hz");Stude stu2=new Stude("2","aao","hz");Stude stu3=new Stude("3","zao","hz");Set<Stude> studeset=new HashSet<Stude>();studeset.add(stu);studeset.add(stu2);studeset.add(stu3); List<Stude> stuList=new ArrayList<Stude>(); stuList.addAll(studeset); Collections.sort(stuList); for (Stude stude : stuList) {System.out.println(stude.getName());}}}1 楼 Technoboy 2011-11-07 1.个人建议,还是使用comparator接口。这样,无需改变类结构。并且stude就是一个VO或者PO