Реализуйте метод сравнения Comparator вне определяющей строки

1

Обычно я определяю Comparator as -

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

И когда Comaprator является частью класса memeber, он немного не выглядит хорошо в коде. Есть ли способ определить Comparator как Comparator<Obj> comparator= new Comparator<Obj>() и реализовать его compare в другом разделе?

Теги:
comparator
compare
code-formatting

5 ответов

1
Лучший ответ

Просто определите class, реализующий интерфейс Comparator, и реализуйте метод compare в этом классе с вашей comparison 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());
1

Попробуйте этот код...

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

class HDTV {
    private int size;
    private String brand;

    public HDTV(int size, String brand) {
        this.size = size;
        this.brand = brand;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public String getBrand() {
        return brand;
    }

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

class SizeComparator implements Comparator<HDTV> {
    @Override
    public int compare(HDTV tv1, HDTV tv2) {
        int tv1Size = tv1.getSize();
        int tv2Size = tv2.getSize();

        if (tv1Size > tv2Size) {
            return 1;
        } else if (tv1Size < tv2Size) {
            return -1;
        } else {
            return 0;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        HDTV tv1 = new HDTV(55, "Samsung");
        HDTV tv2 = new HDTV(60, "Sony");
        HDTV tv3 = new HDTV(42, "Panasonic");

        ArrayList<HDTV> al = new ArrayList<HDTV>();
        al.add(tv1);
        al.add(tv2);
        al.add(tv3);

        Collections.sort(al, new SizeComparator());
        for (HDTV a : al) {
            System.out.println(a.getBrand());
        }
    }
}
1

У вас может быть отдельный класс, который реализует Comparator:

public class MyComapartor implements Comparator{

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

Затем используйте его внутри своего класса:

public class MyClass{

MyComapartor comp = new MyComapartor();

}
0

Вы пытались использовать вложенный класс, например:

 public class Sample {
public void method() {
 Компонента ObjComparator = новый ObjComparator();
}
public static class ObjComparator реализует Comparator {
 public int compare (Obj o1, Obj o2) {
 }
}
 }

Это решение, к которому вы стремитесь?

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();
    }

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню