我有一个问题,即我通过拨打服务获得JSON响应,我收到名称,位置,位置,电子邮件,电话号码字段。每个字段都存储在其ArrayList中。我在Listview中展示了这些价值。
现在我必须按排序顺序显示名称,但其他字段也应按相应名称排列。
我们可以通过使用Collection.sort(nameArrayList)进行排序,但其他字段将如何受到影响? 如何以有效的方式做到这一点?有什么想法??
感谢。
答案 0 :(得分:1)
答案 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