Obtener el mínimo o máximo de dos, una lista o stream de valores en Java

Escrito por el .
java planeta-codigo programacion
Enlace permanente Comentarios

Java

Si tenemos dos valores y queremos obtener el menor con una línea de código, podemos obtenerlo con un a sentencia if o con el operador condicional ? :. Si queremos obtener el menor de tres valores con sentencias if o el operador ? : el problema aparentemente sencillo se complica y si optamos por usar una lista de valores tratándola como si el tamaño fuese desconocido quizá usemos un bucle for junto con una variable que mantenga el menor valor encontrado hasta el momento usando un if que compare el valor menor encontrado con el valor actual de la lista.

Sin embargo, en la API de Java hay dos métodos que permiten simplificar esta tarea, para dos valores podemos usar el método Math.min() y para una lista de valores de tamaño desconocido podemos usar el método Collections.min(). Usando un Stream aún es más sencillo ya que estos poseen un método Stream.min() y Stream.max() que devuelven el valor mínimo y máximo.

Este sería el código para los casos de comparar dos elementos, una lista y un stream de valores. Se que se puede probar con la herramienta JShell incluída entre otras novedades de Java 9. En la lista de 20 valores aleatorios el menor es el 2 y entre la variable a y b el valor mínimo es 19.

 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
Random random = new Random();

int a = random.nextInt(50);
int b = random.nextInt(50);
List<Integer> ints = random.ints(0, 50).limit(20).boxed().collect(Collectors.toList());
IntStream stream = random.ints(0, 50).limit(20);

// Dos valores, mejor usar Math.min()
int min = (a < b) ? a : b;

// Una forma de obtener el mínimo de una lista de valores, mejor usar el método Collections.min()
int min = Integer.MAX_VALUE;
for (int i : ints) {
    if (i < min) {
        min = i;
    }
}
System.out.println(min);

// Dos valores usando el método Math.min()
int min = Math.min(a, b);

// Obtener el mínimo usando el método Math.min()
int min = Collections.min(ints);

// Obtener el mínimo de un stream
int min = stream.min().getAsInt();
Main.java

Diferentes formas de obtener el valor mínimo y máximo

Diferentes formas de obtener el valor mínimo y máximo

Para obtener el máximo sería similar pero usando el método Math.max(), Collections.max() o Stream.max().


Comparte el artículo: