Cómo ordenar la lista con el método de compareTo orden específico de colores en Java

Ronny Giezen:

Estoy tratando de hacer un compareTométodo que utilizo para ordenar una lista en el orden de los siguientes colores: blanco, amarillo, naranja, rojo, azul, púrpura, negro. Donde el blanco es el primer color.

Tengo un objeto de la fruta que contiene diferentes tipos de fruta, estos frutos se especifican en las clases extendidas. Todas las frutas tienen un color (que también está en la lista de colores).

Yo estaba tratando de escribir una instrucción if-else de manera que si el color de la fruta es amarilla retorno 1, etc., y que para todos los colores. Pero eso no parece funcionar.

¿Alguien puede ayudarme a escribir el método compareTo?

¡Gracias por adelantado!

Mi clase de fruta abstracto donde puedo implementar el método compareTo:

public abstract class Fruit implements Comparable<Fruit>, Edible {

    String name;
    Color color;
    boolean fluid;


    public Fruit(String name, Color color, boolean fluid) {
        this.name = name;
        this.color = color;
        this.fluid = fluid;
    }

    public abstract boolean isRotten();



    @Override // I don't know how to create this one correctly
    public int compareTo(Fruit fruit) {
        if (this.getColor().getName().equals("white")){
        return 0;
    }
    if (this.getColor().getName().equals("yellow")){
        return 1;
    }
    if (this.getColor().getName().equals("orange")){
        return 2;
    }
    if (this.getColor().getName().equals("red")){
        return 3;
    }
    if (this.getColor().getName().equals("blue")){
        return 4;
    }
    if (this.getColor().getName().equals("purple")){
        return 5;
    }
    if (this.getColor().getName().equals("black")){
        return 6;
    }
    else return -1;

}

    public Color getColor() {
        return color;
    }

    @Override
    public boolean isEdible() {
        return !isRotten();
    }
}

La clase de color:

public class Color {


    private String name;

    public static final String WHITE = "white";
    public static final String YELLOW = "yellow";
    public static final String ORANGE = "orange";
    public static final String RED = "red";
    public static final String BLUE = "blue";
    public static final String PURPLE = "purple";
    public static final String BLACK = "black";


    public String getName() {
        return name;
    }

    public Color(String name) {
        this.name = name;
    }




}

La clase en la que añado las diferentes frutas a una lista y ordenar la lista:

public class FruitSortingMachine {

    private List<Fruit> fruits = new ArrayList<>();

    /**
     * Instantiates a new Fruit sorting machine.
     */
    public FruitSortingMachine(){}

    /**
     * Sort.
     */
    public void sort() {
        Collections.sort(fruits);
    }

    /**
     * Gets fruits.
     *
     * @return the fruits
     */
    public List<Fruit> getFruits() {

        return this.fruits;
    }

    /**
     * Add fruit boolean.
     *
     * @param fruit the fruit
     * @return the boolean
     */
    public boolean addFruit(Fruit fruit) {
        if (!fruit.isEdible()){
            return false;
        }
        else this.fruits.add(fruit);
        return true;
    }
}
Andrónico:

Yo me convertiría Coloren enumeración:

public enum Color {

    WHITE("white", 0),
    YELLOW("yellow", 1),
    ORANGE = "orange", 2),
    RED("red", 3),
    BLUE("blue", 4),
    PURPLE("purple", 5),
    BLACK("black", 6);

    private String name;
    private int order;

    // getters, setters etc.

}

A continuación, puede comparar los Colors por el ordercampo:

@Override
public int compareTo(Fruit fruit) {
    return Integer.compare(this.getColor().getOrder(), fruit.getColor().getOrder());
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=373015&siteId=1
Recomendado
Clasificación