
Comparar valores de un enum con parámetro de entrada
Publicado por Xavi (21 intervenciones) el 13/11/2021 10:39:15
Hola,
Estoy intentando crear un método llamado isPreceding que devuelva un booleano indicando cuál de los dos valores del enum va antes. La casuística es la siguiente:
- Si el valor del enum que llama al método va antes que el valor del enum que se pasa por parámetro, entonces devuelve true.
- En caso contrario, devuelve false.
- En caso que sean iguales, devuelve null.
En este sentido, el enum que he definido y sus métodos es el siguiente:
En el código que he creado para el método isPreceding le estoy pasando como parámetro de entrada un objeto Position. En este sentido, si se pasa DEFENDER como parámetro i se llama al método des de GOALKEEPER, entonces tiene que devolver true. Si fuera al inrevés, devolvería false ya que GOALKEEPER va antes que DEFENDER en la definición del enum.
Creo que he creado bien la casuística para cuando el parámetro de entrada es igual al valor del enum pero no se hacer las otras dos comparaciones, igual hay una forma más fácil.
Por si ayuda, he creado algunos tests de verificación:
Gracias de antemano.
Estoy intentando crear un método llamado isPreceding que devuelva un booleano indicando cuál de los dos valores del enum va antes. La casuística es la siguiente:
- Si el valor del enum que llama al método va antes que el valor del enum que se pasa por parámetro, entonces devuelve true.
- En caso contrario, devuelve false.
- En caso que sean iguales, devuelve null.
En este sentido, el enum que he definido y sus métodos es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.Arrays;
public enum Position {GOALKEEPER("BLACK"),
DEFENDER("RED"),
MIDFIELDER("GREEN"),
FORWARD("BLUE");
// Variable localprivate String color;
// Constructor que guarda el parametro colorprivate Position(String color){
this.color=color;
} // Obtenemos el colorpublic String getColor() {return color;}
public static String [] getColors() {
return Arrays.stream(Position.values()).map(Position::getColor).toArray(String[]::new);
}@Override
public String toString(){
//Imprimimos los nombres del enumreturn name();
}public static Position getPositionByColor(String color){
// Black serà Goalkeeperif(color.equals("BLACK")) {return Position.GOALKEEPER;}
// Red serà Defenderif(color.equals("RED")) {return Position.DEFENDER;}
// Green serà midfielderif(color.equals("GREEN")) {return Position.MIDFIELDER;}
// Blue serà forwardif(color.equals("BLUE")) {return Position.FORWARD;}
// Cualquier otro casoelse {return null;}
}public boolean isPreceding(Position position){
Position [] posiciones = Position.values();
for(int f=0; f < posiciones.length; f++){
if(posiciones[f] == position) {
return Boolean.parseBoolean(null);
}else if(){
//TODO } } }}En el código que he creado para el método isPreceding le estoy pasando como parámetro de entrada un objeto Position. En este sentido, si se pasa DEFENDER como parámetro i se llama al método des de GOALKEEPER, entonces tiene que devolver true. Si fuera al inrevés, devolvería false ya que GOALKEEPER va antes que DEFENDER en la definición del enum.
Creo que he creado bien la casuística para cuando el parámetro de entrada es igual al valor del enum pero no se hacer las otras dos comparaciones, igual hay una forma más fácil.
Por si ayuda, he creado algunos tests de verificación:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Test
void testOrder() {
position = Position.DEFENDER;
assertFalse(position.isPreceding(Position.GOALKEEPER));
assertTrue(position.isPreceding(Position.MIDFIELDER));
assertTrue(position.isPreceding(Position.FORWARD));
assertTrue(position.isPreceding(Position.DEFENDER));
position = Position.FORWARD;
assertFalse(position.isPreceding(Position.MIDFIELDER));
assertFalse(position.isPreceding(Position.DEFENDER));
assertFalse(position.isPreceding(Position.GOALKEEPER));
assertTrue(position.isPreceding(Position.FORWARD));
position = Position.GOALKEEPER;
assertTrue(position.isPreceding(Position.MIDFIELDER));
assertTrue(position.isPreceding(Position.DEFENDER));
assertTrue(position.isPreceding(Position.FORWARD));
}Gracias de antemano.
Valora esta pregunta


0