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 en Java permite comprobar si un objeto tiene un tipo específico y extraer componentes de él. Simplifica las operaciones de verificación de tipos y 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, la salida es:
"HELLO"
También puedes usar coincidencia de patrones en expresiones switch:
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 tome un argumento:
- Un
Object(value) que podría ser de diferentes tipos
El método debe usar coincidencia de patrones con instanceof para procesar el valor y devolver un string basado en estas reglas:
- Si es un
Integer: devolver"Number: "seguido del valor duplicado - Si es un
String: devolver"Text: "seguido del valor en mayúsculas - Si es un
Boolean: devolver"Boolean: "seguido del valor opuesto (truese convierte enfalsey viceversa) - Para cualquier otro tipo: devolver
"Unknown"
Hoja de referencia
La coincidencia de patrones en Java permite comprobar si un objeto tiene un tipo específico y extraer componentes de él usando instanceof:
Object obj = "Hello";
if (obj instanceof String str) {
// str is automatically cast to String
System.out.println(str.toUpperCase());
}Puedes encadenar múltiples comprobaciones de coincidencia de patrones:
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";
}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: return "Number: " + (value * 2)
// Si es un String: return "Text: " + value.toUpperCase()
// Si es un Boolean: return "Boolean: " + (!value)
// Para cualquier otro tipo: return "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