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) 。

参考技术C Collections.sort(navigations,new Comparator<Navigation>()
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对象排序的问题……的主要内容,如果未能解决你的问题,请参考以下文章

java arraylist 按照对象的属性排序

Java:List集合内的对象进行排序

Java中List对象集合按照对象某一属性字段排序

C#中排序问题,将一个list中对象的某个值排序,返回值最大的那个对象,程序没有结果,哪位高人帮忙看看啊

JAVA list 根据对象的某个属性排序

java中List对象列表去重或取出以及排序