java List对象排序的问题……
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java List对象排序的问题……相关的知识,希望对你有一定的参考价值。
是这样的,有一个Navigation对象,它里面有很多属性,现以三个属性为例:id,name,List<Navigation>,现在有一个List<Navigation> 的对象navigations,如何写循环排序使得外部的大List里面的Navigation对象都以id从大到小排序,同时里面的小的List<Navigation>属性里面的对象也能按照id从大到小的顺序排序?
参考技术A import java.util.ArrayList;import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class TestTwo
public static void main(String[] args)
Navigation n = new Navigation();
List list = n.getNavigations();
Collections.sort(list,new TodoListComparator());
for (int i = 0; i < list.size(); i++)
Navigation na = (Navigation)list.get(i);
System.out.println(na.getId());
class Navigation
int id;
String name;
List navigations = new ArrayList();
public Navigation(int id,String name)
this.id = id;
this.name = name;
public Navigation()
Navigation a1 = new Navigation(33,"张三");
Navigation a2 = new Navigation(11,"李四");
Navigation a3 = new Navigation(99,"王五");
Navigation a4 = new Navigation(24,"王五");
navigations.add(a1);
navigations.add(a2);
navigations.add(a3);
navigations.add(a4);
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public List getNavigations()
return navigations;
public void setNavigations(List navigations)
this.navigations = navigations;
class TodoListComparator implements Comparator
public int compare(Object obj1, Object obj2)
Navigation m1 = (Navigation) obj1;
Navigation m2 = (Navigation) obj2;
int t1 = m1.getId();
int t2 = m2.getId();
if (t1 < t2)
return 1;
else if (t1 > 2)
return -1;
else
return 0;
参考技术B 使用比较器,实现一个Comparator接口,在接口中写比较算法。然后调用
Collections.sort(list , comparator);追问
我用的就是比较器,但是这样只能排外部的大的list对里面的小list里面的Navigation没有排序的!
追答那我建议用TreeSet 集合,TreeSet支持排序,指定比较器,
TreeSet(Comparator comparator) 。
public int compare(Navigation o1, Navigation o2)
return o2.getId()-o1.getId();
);追问
我这样排序只能排外部的大List,不能排里面的的小的list里面的Navigation!
追答list对list对象排序?没有这么sb的需求的
追问请看问题!http://zhidao.baidu.com/question/329201607.html
追答分别排序;
先小的排好序,在塞到大的list里。
最后排好大的就行了
关键是假如里面嵌套的对象比较深的话,这样做就深麻烦了,其实这是一个网站导航排序的问题!
追答那也没什么,就一个而已。每次有list的时候就调用一下而已
追问我那个写法为什么有问题啊,我是先对大的list排序,然后循环对每一个对象里面的小的list进行排序,这样出错了……为什么啊?
追答应该是你的小list有空对象;那要改改了
public int compare(Navigation o1, Navigation o2)
if(o1==null&&o2==null)
return 0;
if(o1!=null&&o2==null)
return -1;
if(o1==null&&o2!=null)
return 1;
return o2.getId()-o1.getId();
JAVA list 根据对象的某个属性排序
//需要排序的list List<T> list= new ArrayList<>(); //开始排序 Collections.sort(list, new Comparator<T>(){ public int compare(T o1, T o2) { //排序属性 if(o1.getNum() < o2.getNum()){ return 1; } if(o1.getNum() == o2.getNum()){ return 0; } return -1; } }); //排序完成 输出 System.out.println(new Gson().toJson(list))
以上是关于java List对象排序的问题……的主要内容,如果未能解决你的问题,请参考以下文章