Coincidencia de Patrones
Parte de la sección Lógica y Flujo del Journey de Java de Coddy — lección 37 de 59.
La coincidencia de patrones (pattern matching) en Java permite comprobar si un objeto tiene un tipo específico y extraer componentes del mismo. Simplifica las operaciones de comprobación de tipos y de conversión (casting).
Veamos cómo usar la coincidencia de patrones con instanceof:
Object obj = "Hello";
if (obj instanceof String str) {
// str se convierte automáticamente a String
System.out.println(str.toUpperCase());
}Después de ejecutar el código anterior, el resultado es:
"HELLO"
También puedes encadenar comprobaciones de coincidencia de patrones con else if:
Object value = 42;
String result;
if (value instanceof Integer i) {
result = "Number: " + i;
} else if (value instanceof String s) {
result = "Text: " + s;
} else {
result = "Unknown";
}Después de ejecutar el código anterior, result contiene:
“Number: 42”
Desafío
FácilCrea un método llamado processValue que recibe un argumento:
- Un Object (
value) que podría ser de diferentes tipos
El método debe usar pattern matching con instanceof para procesar el valor y devolver una cadena basada en estas reglas:
- Si es un Integer: devuelve "Number: " seguido del valor duplicado
- Si es un String: devuelve "Text: " seguido del valor en mayúsculas
- Si es un Boolean: devuelve "Boolean: " seguido del valor opuesto (true se convierte en false y viceversa)
- Para cualquier otro tipo: devuelve "Unknown"
Pruébalo tú mismo
import java.util.Scanner;
public class Main {
public static String processValue(Object value) {
// TODO: Usa pattern matching con instanceof para procesar el valor
// Si es un Integer: devuelve "Number: " + (value * 2)
// Si es un String: devuelve "Text: " + value.toUpperCase()
// Si es un Boolean: devuelve "Boolean: " + (!value)
// Para cualquier otro tipo: devuelve "Unknown"
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String type = scanner.nextLine();
String inputValue = scanner.nextLine();
Object value = switch(type) {
case "Integer" -> Integer.parseInt(inputValue);
case "String" -> inputValue;
case "Boolean" -> Boolean.parseBoolean(inputValue);
default -> inputValue;
};
System.out.println(processValue(value));
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Arreglos Multidimensionales
Básicos de Arreglos 2DAccediendo a Elementos de Arreglos 2DBucles Anidados con Arreglos 2DResumen - Arreglos 2DSuma y Resta de MatricesArreglos IrregularesArreglos 3D y Más AlláPatrones Comunes de Arreglos 2DResumen - Todo Sobre Arreglos4HashSet Parte 1
¿Qué es un HashSet?Agregando un elementoEliminando un elementoComprobando si existe un elementoVacío y tamañoLimpiar y clonarResumen - HashSet7Manejo Básico de Errores
Básicos de Try-CatchBloque FinallyLanzamiento de ExcepcionesExcepciones Personalizadas2HashMap Parte 1
¿Qué es un HashMap?Declarar un HashMapAcceder a ValoresVerificar si una Clave ExisteModificar DiccionariosResumen - HashMap3HashMap Parte 2
Métodos de HashMapIterar con keySet()Iterar con entrySet()HashMap AnidadoResumen - Gestionar AlmacénResumen - Operaciones de HashMap6Flujo de Control Avanzado
Sentencias EtiquetadasExpresión SwitchCoincidencia de PatronesCláusulas de GuardiaResumen - Flujo de Control9Proyecto - Contador de Palabras Únicas
Entrada y Almacenamiento de TextoProcesamiento de Palabras