-1

重複の可能性:
複数のキーを使用してJavaオブジェクトをソートする

従業員クラスがあります。並べ替えたい従業員名に基づいて。2つのオブジェクト(つまり2人の従業員)の従業員名が同じである場合、従業員の年齢に基づいて並べ替えます。

従業員名で並べ替えるために、COmparableインターフェイスを実装し、次のコードを使用しました。

@Override
public int compareTo(Employee o) {
    return name.compareTo(o.getName());
}

このコードは私にとってはうまく機能しています。しかし、2人の従業員の名前が同じである場合、年齢に基づく並べ替えを組み込む方法がわかりませんか?

これにはコンパレータを使用する必要がありますか?これを達成する方法がわかりません。

助けてください

4

3 に答える 3

1

名前が同じである場合(つまり、結果が0の場合)、年齢で並べ替えることができます。名前がゼロ以外の結果を返す場合は、それを返すだけです

例えば

@Override
public int compareTo(Employee o) {
    int i = name.compareTo(o.getName());
    if (i == 0) { //ie the names are the same
        return age.compareTo(o.getAge();
    }
    return i;
}
于 2012-12-08T14:16:02.440 に答える
0

従業員をArrayListに格納してから、Collections.sortを使用して並べ替えることができます。

public class CustomComparator implements Comparator<Employee> {
    @Override
    public int compare(Employee o1, Employee o2) {
        return o1.getAge().compareTo(o2.getAge());
    }
}

これで、Collections.sortを次のように使用できます。

Collections.sort(employeeList, new CustomComparator());
于 2012-12-08T14:29:57.257 に答える
-1

説明のロジックは、コードに直接変換する必要があります。

public int compareTo(Employee o)
{
    firstfield = name.compareTo(o.name())
    if( firstfield == 0 )
    {
        return age.compareTo(o.age())
    }
    else
    {
        return firstfield
    }
}

比較する新しい文字列を作成して作業を行うこともできます。

public int compareTo(Employee o)
{
    me = sprintf( "%s:%d", name, age)
    them = sprintf( "%s:%d", o.name, o.age )
    return me.compareTo(them)
}
于 2012-12-08T14:22:03.217 に答える