`

将set集合转为list并对对象进行排序

    博客分类:
  • J2EE
 
阅读更多
之前用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;
	}

	@Override
	public 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
0
分享到:
评论
2 楼 bingyingao 2011-11-07  
Technoboy 写道
1.个人建议,还是使用comparator接口。这样,无需改变类结构。并且stude就是一个VO或者PO
2.即使楼主想使用Comparable,那也需要public class Stude implements Comparable<Stude>

多谢仁兄点拨,我会进一步尝试,希望有机会讨教...
1 楼 Technoboy 2011-11-07  
1.个人建议,还是使用comparator接口。这样,无需改变类结构。并且stude就是一个VO或者PO
2.即使楼主想使用Comparable,那也需要public class Stude implements Comparable<Stude>

相关推荐

    set转成list集合再排序输出

    Java相关 public static void main(String[] args) { User u1=new User(1, "zhangsan");... //放入到Set集合中 Set userset=new HashSet(); userset.add(u1); userset.add(u2); userset.add(u3);

    Set-List-Map.rar_DEMO_list set map

    4. 可能还有关于集合转换的示例,如从`List`转为`Set`,或者将`Map`的键或值转化为`List`。 5. 最后,可能包含了集合的遍历策略,如迭代器、增强for循环(foreach)以及流API的使用。 通过这个压缩包的学习,初学...

    集合框架的总结

    在实际应用中,我们经常需要进行集合转换,例如从`List`转为`Set`以去重,或者从`List`转为`Map`以建立映射关系。`Collections`工具类提供了丰富的静态方法,用于集合的操作,如排序、查找、复制等。此外,`Stream ...

    java集合相关操作

    例如,`Collections.sort()`可以对`List`进行排序,`Collections.reverse()`可以反转`List`,`Collections.fill()`用于填充数组或集合。 总结来说,Java集合框架为开发者提供了强大的工具来处理和操作对象。理解并...

    40道java集合面试题含答案(很全很详细)

    Collection接口下有Set和List子接口,而Map接口用于存储键值对。 2. **集合的特点**: - 集合是对象容器,便于管理大量对象。 - 相比数组,集合的长度可变,适应不同数量的对象存储需求。 3. **集合与数组的区别...

    Java集合部分面试题.docx

    - **排序**:Collections.sort()用于对List进行排序。 - **搜索**:Collections.binarySearch()在排序后的List中查找元素。 - **混编**:Collections.shuffle()随机打乱List中的元素顺序。 - **最大最小值**:...

    Java集合容器面试题(2022最新版)-重点.docx

    - `Comparator`接口用于实现外部比较逻辑,可以按照不同的规则对对象进行排序。 #### Collection与Collections的区别 - `Collection`是所有集合的根接口。 - `Collections`是针对集合类的一个工具类,提供了一系列...

    Java 72道面试题和答案.docx

    - 存储对象的容器,便于对大量数据进行集中管理和操作。 - 集合长度可变,与固定长度的数组相比更灵活。 3. **集合与数组的区别**: - 长度:数组长度固定,集合长度可变。 - 存储类型:数组可存储基本数据...

    Collection_java_

    8. **集合转换**:通过`Collections`工具类,可以实现集合之间的转换,比如将List转为Set,或排序List。 9. **集合的复制**:`Collection`接口的`clone()`方法可以创建一个集合的浅拷贝,而`copy()`方法可以将一个...

    Java面试题和答案72道.docx

    - 集合分为三个主要类别:Set(集),List(列表)和Map(映射)。 - 集合框架的优点包括容量自动增长、高性能的数据结构和算法、代码复用性以及降低了API学习成本。 2. **集合与数组的区别**: - 数组长度固定...

    Java 72 道面试题及答案.docx

    - **Collection接口** 是所有集合的父接口,下分为Set接口和List接口。 - **Set接口**:不允许存储重复元素,例如HashSet、TreeSet和LinkedHashSet。 - **List接口**:有序容器,允许重复元素和多个null,如...

    python期末复习点

    - 排序并去重:可以将字符串转为列表,再利用 `set` 去重,然后排序。例如:`s1 = list(set(input()))`,再用 `sort()` 和 `join()` 进行排序和连接。 - 列表排序:可以使用 `list.sort()` 或 `sorted()` 函数,`...

    JDK1.8对于集合操作的简化处理的应用

    1. **集合转为Stream** 集合可以方便地转换为Stream对象,这通过调用集合的`stream()`或`parallelStream()`方法实现。例如,`List&lt;String&gt; list = ...; Stream&lt;String&gt; stream = list.stream();` 2. **面向流的...

    java面试宝典梳理大纲最终-赵学浦.docx

    - **List、Map和Set的区别**:List是有序的、可重复的集合,Map是键值对的集合,Set是不包含重复元素的集合。 以上只是Java面试中的一部分常见问题,全面准备还需要深入学习异常处理、IO流、多线程、网络编程、...

    数据结构的python语言描述

    列表推导式是一种简洁的创建新列表的方法,基于现有列表或其他可迭代对象进行计算。 ```python squares = [x**2 for x in range(10)] # 创建0到9的平方列表 ``` 6. 字符串(String) 字符串是不可变的字符序列,可以...

    开发+python+基础+进阶+实例

    39. 转为集合类型:`set()`函数可以将可迭代对象转换为集合。 40. 转为切片对象:`slice(start, stop, step)`创建一个切片对象。 41. 拿来就用的排序函数:`sorted(iterable, key=None, reverse=False)`对可迭代对象...

    Java笔记word.docx

    List集合转为String数组 可以使用`List.toArray()`方法将列表转换为数组。 **示例**: ```java List&lt;String&gt; list = Arrays.asList("a", "b", "c"); String[] array = list.toArray(new String[0]); ``` #### ...

    殊绝结构 c++ STL

    1. 容器:如vector(动态数组)、list(双向链表)、deque(双端队列)、set(集合)、map(映射)等。这些容器用于存储和管理对象,每个都有其特定的访问和操作特性。 2. 迭代器:它们是STL的桥梁,允许程序员像...

    面试题(2).docx

    - Collections是工具类,提供了对集合的实用操作,如排序、查找、线程安全化等。 7. **List与Map的区别** - List存储有序的、可重复的元素,如ArrayList和LinkedList。 - Map存储键值对,键是唯一的,值可以重复...

Global site tag (gtag.js) - Google Analytics