当另一个属性具有相同的值时,如何基于对象的一个​​属性对对象数组进行排序?

时间:2014-11-13 12:58:06

标签: java sorting

我有一个对象数组如下。

[obj1 obj2 obj3 ...]

数组中的每个对象都具有属性date(java.util.Date)和name(String)。

obj1.date = new Date(); obj1.name =“A”;

数组中的对象已根据日期排序。多个对象可以具有相同的日期值。

现在,如果对象具有相同的日期,我想基于对象的名称对对象数组进行排序。更清楚的是,如果所有对象的日期不同,则对象的顺序不应有任何变化。如果对象具有相同的日期,则仅根据名称对这些对象进行排序。请注意,当前数组已根据日期排序。

举个例子,我有下面的数组 [OBJ1,OBJ2,OBJ3,OBJ4]

obj1.name =“B”; obj1.date = Tue Jul 01 00:00:00 IST 2014;

obj2.name =“D”; obj2.date = Thu Jul 03 00:00:00 IST 2014;

obj3.name =“A”; obj3.date = Thu Jul 03 00:00:00 IST 2014;

obj4.name =“C”; obj4.date = Sun Jul 06 00:00:00 IST 2014;

排序后的数组应该是[obj1,obj3,obj2,obj4]

3 个答案:

答案 0 :(得分:2)

Smutje在Java 5到7中为您提供了如何执行此操作的答案。使用Java8,您可以使用功能接口和lambda表达式。所以你的排序方法会减少到

Arrays.sort(objectArray, Comparator.<YourObject>comparing(YourObject::getDate)
        .thenComparing(YourObject::getString));

答案 1 :(得分:1)

写一个Comparator<YourObject>,首先比较日期,如果日期相同,写一个名称并对数组进行排序

实施例

YourObject

public class YourObject {

    private Date date;

    private String string;

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }
}

排序

Arrays.sort(new YourObject[]{}, new Comparator<YourObject>() {

        @Override
        public int compare(YourObject o1, YourObject o2) {
            final int dateComparisonResult = o1.getDate().compareTo(o2.getDate());
            final int yourObjectComparisonResult;

            if (dateComparisonResult == 0) {
                yourObjectComparisonResult = o1.getString().compareTo(o2.getString());
            } else {
                yourObjectComparisonResult = dateComparisonResult;
            }

            return yourObjectComparisonResult;
        }
    });

答案 2 :(得分:1)

Object[] obj = {obj1,obj2,obj3};

你的阵列就像这样

您只需将其转换为`java.util.List`,因为它具有有用的API(类和接口),因此您可以轻松访问该API而不是您自己的强硬编码

步骤1:List l = Arrays.asList(obj);


获得List的引用后,您可以使用`Collections.sort(Collection)`

对列表进行排序。

步骤2:赞,Collections.sort(l);


如果您想要自己的排序技术,例如按日期或按名称 你只需使用java.util.Comparator界面

例如,Byname基于这样排序代码片段,


class ByName implements Comparator<String>{

    @Override
    public int compare(String str1, String str2) {
        // TODO Auto-generated method stub
        if(str1.length > str2.length)
           return 1;
        else
           return -1;
    }
}