1

一般的に私は次のように定義Comparatorします -

Comparator<Obj> comparator= new Comparator<Obj>() {
    public int compare(Obj o1, Obj o2) { 
        //implementation...
    } 
};

また、これComapratorがクラス メンバーの一部である場合は、コード形式が少し見栄えがよくありません。Comparatorasを定義して別のセクションにComparator<Obj> comparator= new Comparator<Obj>()実装する方法はありますか?compare

4

5 に答える 5

1

インターフェイスclassを実装する を定義し、そのクラスにメソッドを実装するだけです。Comparatorcomparecomparison logic

public class ObjComparator implements Comparator<Obj> {
    public int compare(Obj o1, Obj o2) { 
        //implementation
    }
}

次に、 を使用する場所でComparator、このクラスのインスタンスを使用します。例Arrays.sort: -

Obj[] yourArray = new Obj[10];
Arrays.sort(yourArray, new ObjComparator());
于 2012-11-26T10:02:29.470 に答える
1

実装する別のクラスを持つことができますComparator

public class MyComapartor implements Comparator{

    public int compare(Obj o1, Obj o2) 
        { //implementation...
        } 
}

次に、クラス内で使用します。

public class MyClass{

MyComapartor comp = new MyComapartor();

}
于 2012-11-26T10:03:56.900 に答える
0

このコードを試してください..............

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

class Car {

    private String name;
    private String brand;
    private double cost;

    public Car(String name, String brand, double cost) {

        this.name = name;
        this.brand = brand;
        this.cost = cost;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public double getCost() {
        return cost;
    }

    public void setCost(double cost) {
        this.cost = cost;
    }

    public String toString() {

        return getName();
    }

}

public class Hog {

    ArrayList<Car> cars = new ArrayList<Car>();

    public void setIt() {

        cars.add(new Car("Padmini", "Fiat", 100008.00));
        cars.add(new Car("XYlo", "Mahindra", 100000.00));
        cars.add(new Car("Swift", "Maruti", 200000.00));
    }

    public void sortIt() {

        Collections.sort(cars, new NameComparator());
        System.out.println(cars);
        Collections.sort(cars, new BrandComparator());
        System.out.println(cars);
        Collections.sort(cars, new CostComparator());
        System.out.println(cars);
    }

    class NameComparator implements Comparator<Car> {

        public int compare(Car c1, Car c2) {

            return c1.getName().compareTo(c2.getName());
        }
    }

    class BrandComparator implements Comparator<Car> {

        public int compare(Car c1, Car c2) {

            return c1.getBrand().compareTo(c2.getBrand());
        }
    }

    class CostComparator implements Comparator<Car> {

        public int compare(Car c1, Car c2) {

            return new Double(c1.getCost()).compareTo(new Double(c2.getCost()));
        }
    }

    public static void main(String[] args) {

        Hog h = new Hog();

        h.setIt();
        h.sortIt();
    }

}
于 2012-11-26T10:01:40.337 に答える
0

ネストされたクラスを使用しようとしましたか。

public class Sample {
    public void method() {
        ObjComparator comparator = new ObjComparator();
    }
    public static class ObjComparator implements Comparator {
        public int compare(Obj o1, Obj o2) {
        }
    }
}

これはあなたが求めている解決策ですか?

于 2012-11-26T10:03:19.730 に答える