我有一个问题,我通过调用服务获得了 JSON 响应,我获得了名称、位置、职位、电子邮件、电话号码 字段。每个字段都存储在其 ArrayList 中。我在 Listview 中显示这些值。
现在我必须按排序顺序显示名称,但其他字段也应按相应的名称排列。
我们可以通过使用 Collection.sort(nameArrayList) 进行排序,但是其他字段将如何受到影响? 如何以有效的方式做到这一点?有什么想法吗??
谢谢。
最佳答案
创建一个 hashMap<String name ,pojo values)
;
现在读取每个名称并将相应的值位置、位置、电子邮件、电话号码存储到 pojo 对象中。
map.put(name , pojo) ;
插入所有值后按名称对 map 进行排序。 在任何使用 hashmap 填充 list 的地方,遍历键和值并使用它们
名字重复时
最好将 ArrayList 与您自己的比较器一起使用。 浏览此代码 fragment 以获得更多帮助
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+)?$");
}
}
}
关于android - 如何对多个arraylist进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8753819/