如何对多个arraylist进行排序

时间:2012-01-06 05:35:27

标签: android sorting arraylist

我有一个问题,即我通过拨打服务获得JSON响应,我收到名称,位置,位置,电子邮件,电话号码字段。每个字段都存储在其ArrayList中。我在Listview中展示了这些价值。

现在我必须按排序顺序显示名称,但其他字段也应按相应名称排列。

我们可以通过使用Collection.sort(nameArrayList)进行排序,但其他字段将如何受到影响? 如何以有效的方式做到这一点?有什么想法??

感谢。

3 个答案:

答案 0 :(得分:1)

结帐this Blog,其中包含有关ListView内容排序的完整说明。

您也可以从Here获取来源(注意 - 尚未检查)

答案 1 :(得分:1)

创建hashMap<String name ,pojo values); 现在读取每个名称并将相应的值位置,位置,电子邮件,电话号码存储到pojo对象中。

map.put(name , pojo) ;

插入所有值后按名称排序映射。 无论何时使用hashmap填充列表,迭代键和值并使用它们

重复名称时

最好将ArrayList与您自己的比较器一起使用。 请仔细阅读此代码段以获取更多帮助

public class Main {

    String name = null;

    // 2011-12-11 11:30:20:0
    public static void main(String[] args) {

    ArrayList<Main> main = new ArrayList<Main>();
    main.add(new Main("CRohit"));
    main.add(new Main("DRohit"));
    main.add(new Main("ARohit"));
    main.add(new Main("12349"));
    main.add(new Main("BRohit"));
    main.add(new Main("ZRohit"));
    main.add(new Main("12345"));
    main.add(new Main("FRohit"));
    main.add(new Main("12348"));
    main.add(new Main(null));
    main.add(new Main(null));

    Collections.sort(main, new PojoComparator());
    for(Main m : main)
    {
        System.out.println(m.getName());
    }


    }

    public Main(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    class ChildProfileComparator implements Comparator<Main> {



    @Override
    public int compare(Main o1, Main o2) {

        String firstName = o1.getName();
        String secondName = o2.getName();

        if (firstName == null) {
            return +1;
        }
        if (secondName == null) {
            return -1;
        }

        if(isNumber(firstName) && isNumber(secondName))
        {
            double d1 = Double.parseDouble(firstName);
            double d2 = Double.parseDouble(secondName);

            return (d1>d2)?+1:-1;
        }

        if(isNumber(firstName))
        {
            return +1;
        }
        if(isNumber(secondName))
        {
            return -1;
        }
       return o1.getName().compareTo(o2.getName());
    }

    public boolean isNumber(String x)
    {
        if(x == null)
        {
            return false;
        }
        return x.matches("^-?\\d+(\\.\\d+)?$");
    }
}
}

答案 2 :(得分:0)

为什么不创建一个表示每个对象的类,而不是将每个字段存储在自己的数组列表中,以便该类具有名称,位置,位置,电子邮件和电话号码的字段。解析JSON时,创建上述对象的实例,并将其放入ArrayList中。通过实现类似的接口使对象可比较..您的compareTo函数将简单地取消引用输入对象的名称对象并与当前对象进行比较。

有关详细信息,请参阅此处: http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html