2012-01-06 85 views
2

我有一个问题,我通过调用服务得到一个JSON响应,我得到名称,位置,位置,电子邮件,电话号码字段。每个字段都存储在其ArrayList中。我在Listview中显示这些值。如何排序多个arraylist

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

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

谢谢。

+0

看到我的更新答案.. – 2012-01-06 06:51:02

+0

U可以使用比较http://www.javadeveloper.co.in/java-example/java-comparator-example.html 请参考此链接。 – Richa 2012-01-06 05:48:24

回答

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+)?$"); 
    } 
} 
} 
+0

你好Shailendra,谢谢你的回应。我按照你所建议的方式做了同样的工作,但它有效,但是有一种情况,当任何两个人的名字相同时,它将只显示一个信息,因为在HashMap中key必须是唯一的。 – Himanshu 2012-01-06 10:27:44

+0

哦对。我想现在你应该使用包含名称和其他值的pojo的ArrayList,现在创建一个Comparator,它可以在这个Pojo中按名称对元素进行排序。搜索比较器更多的想法。 – 2012-01-07 10:51:45

1

结帐this Blog有关于ListView的内容的排序的完整说明。

您也可以从Here获得源(注 - 还没有检查)

0

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

这里看到更多的信息: http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html