java-将不同类型的对象排序到一个列表中

java-将不同类型的对象排序到一个列表中,第1张

概述我有以下问题,但我不确定如何解决.我从几个不同的服务器请求数据,每个服务器返回一个不同类型的对象列表(每个服务器都有它自己特定的唯一POJO对象类型)-但是所有这些对象列表的共同点是,所有对象都有一个日期参数.然后,我需要将所有列表中的对象显示为一个巨大的混合列表供用户使

我有以下问题,但我不确定如何解决.我从几个不同的服务器请求数据,每个服务器返回一个不同类型的对象列表(每个服务器都有它自己特定的唯一POJO对象类型)-但是所有这些对象列表的共同点是,所有对象都有一个日期参数.然后,我需要将所有列表中的对象显示为一个巨大的混合列表供用户使用,所有各种对象均按日期排序.

我制作了一个扩展baseadapter的适配器,并将所有对象的数组列表传递给了该适配器-但是如何按日期对所有这些对象列表进行排序并一起显示呢?我可以创建一个具有所有其他对象属性的“超级对象”,然后对该超级对象进行排序后的数组传递给适配器,但这似乎是一个混乱且粗糙的解决方案.有某种或多或少的优雅方法可以做到这一点吗?

public class someAdapter extends BaseAdapter{...public someAdapter(ArrayList<ObjectOne> objectOneArray, ArrayList<ObjectTwo> objectTwoArray) {        if (objectOneArray != null) {            this.localObjectOneList.addAll(objectOneArray);        }        ...}}

对象类型的示例:

public class ObjectOne implements Serializable {private String date;private String someFIEldOne;private String someFIEldTwo;...//getters and setters...}

重申一下-最终列表必须按照日期的顺序混合所有不同的对象类型.

解决方法:

如果没有庞大的管道,您最初期望的拥有超类的方式会很好.
更好的方法如下:假定所有POJO都有getDate()方法.

>声明方法getDate()从任何POJO中检索日期对象.
>声明比较器以比较日期
>排序对象

如果POJO没有吸气剂,即getDate()方法,则在比较器中将getDateFromMethod()替换为getDateFromproperty().

public class Sorter{ public voID sortList(){    Collections.sort(objList, comparator);    // Now consume / print your objList to get sorted by date}ArrayList<Object>   objList     = new ArrayList<Object>();Comparator<Object>  comparator  = new Comparator<Object>()                                {                                @OverrIDe                                public int compare(Object object1, Object o2)                                    {                                        Date o1Date = getDateFromMethod(object1);                                        Date o2Date = getDateFromMethod(o2);                                        if (o1Date != null && o2Date != null)                                        {                                            if (o1Date.before(o2Date))                                                return -1;                                            else if (o1Date.after(o2Date))                                                return 1;                                            else                                                return 0;                                        }                                        else                                            return -1;                                    }                                };public Date getDateFromMethod(Object obj){    Date date = null;    String getDate = "getDate";    try    {        Method method = obj.getClass().getmethod(getDate, (Class<?>[]) null);        if (method != null)            date = (Date) method.invoke(obj, (Object[]) null);    }    catch (NoSuchMethodException e)    {        // Todo auto-generated catch block        e.printstacktrace();    }    catch (SecurityException e)    {        // Todo auto-generated catch block        e.printstacktrace();    }    catch (illegalaccessexception e)    {        // Todo auto-generated catch block        e.printstacktrace();    }    catch (IllegalArgumentException e)    {        // Todo auto-generated catch block        e.printstacktrace();    }    catch (InvocationTargetException e)    {        // Todo auto-generated catch block        e.printstacktrace();    }    return date;}public Date getDateFromProperty(Object obj)                            {                                Date date=null;                                try                                {                                FIEld dateFIEld=    obj.getClass().getFIEld("date");                                if(dateFIEld!=null)                                    date=(Date) dateFIEld.get(obj);                                }                                catch (NoSuchFIEldException e)                                {                                    // Todo auto-generated catch block                                    e.printstacktrace();                                }                                catch (SecurityException e)                                {                                    // Todo auto-generated catch block                                    e.printstacktrace();                                }                                catch (IllegalArgumentException e)                                {                                    // Todo auto-generated catch block                                    e.printstacktrace();                                }                                catch (illegalaccessexception e)                                {                                    // Todo auto-generated catch block                                    e.printstacktrace();                                }                                return date;                            }

}

现在说,例如,您具有如下的Obj1,Obj2和Obj3,使用这些POJOS创建对象并填充objList并测试解决方案.

Obj1类
{
    int ID;
    整数名称
    日期date;

public Date getDate()

{
    归期;
}
    公共诠释getID()
    {
        返回ID;
    }

public voID setID(int ID){    this.ID = ID;}public int getname(){    return name;}public voID setname(int name){    this.name = name;}

}

Obj2类
{
    整数序列;
    int位置;
    日期date;

public Date getDate()

{
    归期;
}
    public int getSequence()
    {
        返回顺序;
    }

public voID setSequence(int sequence){    this.sequence = sequence;}public int getLocation(){    return location;}public voID setLocation(int location){    this.location = location;}

}

Obj3类
{
    整型
    int来源;
日期date;

public Date getDate()

{
    归期;
}

public voID setDate(日期)
{
    this.date =日期;
}

public int getType(){    return type;}public voID setType(int type){    this.type = type;}public int getorigin(){    return origin;}public voID setorigin(int origin){    this.origin = origin;}

}

总结

以上是内存溢出为你收集整理的java-将不同类型的对象排序到一个列表中全部内容,希望文章能够帮你解决java-将不同类型的对象排序到一个列表中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存