List中有多个对象,都是同一个PO类的对象,里面有一个sid属性与一个日期属性,现在需要把这个list里面的对象按照sid属性进行分类,就是所有sid相同的对象,放入一个新的arrayList里面.
真的是一个比较有意思的问题,如果可以的话,还需要在排序后能按照对象的另一个属性进行排序..
希望高手解疑惑,新人感激不尽...
解决方案 »
- 请教一个关于java.awt.Image与sun.awt.image.ToolkitImage,java.awt.image.BufferedImage的问题
- Java编写聊天软件的信息显示问题!!!??
- 在frame关闭的时候添加对话框,按取消不让它关闭
- 急急急...在一个线程里创建了一个界面窗口后..线程无法start()
- JDBC连接mysql无法理解的异常
- 请问如何用正则表达式判断一个字符串是否含有一个特定的子字符串
- 类中的静态方法如何调用?
- 请问JDK 1.4.2 HtmlHelp Documentation在哪里下载啊?谢谢!
- jtable的问题
- tomcat是WEB服务器吗?
- 急问,怎么实现这种界面的跳转啊?
- java 继承问题
冒泡:问题在于我冒泡之后确实已经按照sid进行了一定的排序,但我并不能确认sid相同的对象分别有几个!可能是3个为1的,3个为3的,6个为8的..这些确认不了,我就进入不了下一个步骤啊..闷中..
双for循环,在循环内部进行比较,然后相同的都扔到一个新的arrayList里面:
问题在于..第一个与第三个相同比较后,第三个与第一个还比较..然后会出现很多垃圾数据....也不能确定相同的对象有多少..高手呢..高手在哪,帮帮我呀..要哭死我了.
List<CourseNode> catalogNodes = this.courseManager.getCourseNodeChildren(this.lessonManager.getLessonCatalogCourseId(), null);
Collections.sort(catalogNodes, new Comparator<CourseNode>(){
public int compare(CourseNode o1, CourseNode o2) {
return o1.getEnglishName().compareTo(o2.getEnglishName());
}
});
TreeMap tm=new TreeMap();
tm.put("1", "11111111");
tm.put("0", "00000000");
tm.put("8", "8888888888");
tm.put("3", "333333333");
System.out.println("TreeMap1="+tm);
Set s=tm.keySet();
Iterator it=s.iterator();
while(it.hasNext()){
System.out.println(tm.get(it.next()));
}
打印结果:
TreeMap1={0=00000000, 1=11111111, 3=333333333, 8=8888888888}
00000000
11111111
333333333
8888888888
看到了吗,是按key排序的,你可以把对象的sid作为key,把PO作为value,如:
tm.put(u.getSid(),u);
这样,用哪个属性作key,就按哪个属性排序
如果我的思路实现不了,再和楼上请教..
我改成你的吧..哈哈..
不对呀..我是分类..不是排序呀...这样我还是实现不了我的业务需求呀..这样吧,我给你大概再说一下..<root>
<side>
<sid>111</sid>
<day value="2008-03-10">
<sss>0</sss>
<ddd>0</ddd>
<fff>123</fff>
</day>
<day value="2008-03-11">
<sss>2000</sss>
<ddd>789</ddd>
<fff>234</fff>
</day>
</side>
<side>
<sid>222</sid>
<day value="2008-03-10">
<sss>500</sss>
<ddd>222</ddd>
<fff>111</fff>
</day>
<day value="2008-03-11">
<sss>900</sss>
<ddd>444</ddd>
<fff>333</fff>
</day>
</side>
</root>
实现这样一个效果..现在po完全没有问题.了,数据也有了..是一个list,但关键在于他的分类很麻烦.
那你就再加个方法把不同sid的放在不同的list中不久Ok了
排序的过程。你参考一下我写的代码
List <CourseNode> catalogNodes = this.courseManager.getCourseNodeChildren(this.lessonManager.getLessonCatalogCourseId(), null);
Collections.sort(catalogNodes, new Comparator <CourseNode>(){
public int compare(CourseNode o1, CourseNode o2) {
return o1.getEnglishName().compareTo(o2.getEnglishName());
}
});
//思路:定义个一个变量保存上次循环的值,如果值发生变化,那边就证明是新的SID,需要创建一个新的List。
//这里循环创建List( 示意代码,你需要调试)
List<list> list = new ArrayList<List>();
Side oldSide = null;
int index = 0;
List<Side> noSameSideList = null;
for(Side sideList : 你排序好的List) {
if(index == 0) {
oldSide = sideList ;
noSameSideList = new ArrayList<Side>();
}
if(oldSide.getSide() != sideList.getSide()) {//是新的List中的Side了
list.add(noSameSideList )
noSameSideList = new ArrayList<Side>();
}else{
noSameSideList.add(sideList );
if(index == 你排序好的List.size()-1) {
list.add(noSameSideList )
}
}
index ++;
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;public class A {
public Map<Integer, List<User>> sort(List<User> list){
TreeMap<Integer, List<User>> tm=new TreeMap<Integer, List<User>>();
for(int i=0;i<list.size();i++){
User u=(User)list.get(i);
if(tm.containsKey(u.getSid())){//
List<User> l=(List<User>)tm.get(u.getSid());
l.add(u);
}else{
List<User> tem=new ArrayList<User>();
tem.add(u);
tm.put(u.getSid(), tem);
}
}
return tm;
}
public static void main(String[] args) throws IOException{
List<User> l=new ArrayList<User>();
User u=new User();
u.setSid(5);
User u1=new User();
u1.setSid(1); User u2=new User();
u2.setSid(1);
User u3=new User();
u3.setSid(4); l.add(u);
l.add(u1);
l.add(u2);
l.add(u3);
System.out.println(new A().sort(l));
}}打印结果:
{1=[ch5.User@757aef, ch5.User@d9f9c3], 4=[ch5.User@9cab16], 5=[ch5.User@1a46e30]}