Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

591
Vistas
¿Cuál es la mejor alternativa de mapNotNull (de Kotlin) en Java?
inline fun <T, R : Any> Array<out T>.mapNotNull( transform: (T) -> R? ): List<R>

Mi caso de uso es un poco diferente a este

¿Hay alguna función que pueda usar en lugar de mapNotNull en Java?

 val strings: List<String> = listOf("12a", "45", "", "3") val ints: List<Int> = strings.mapNotNull { it.toIntOrNull() } println(ints) // [45, 3]
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Solución

No hay una solución directa, pero el equivalente del código en Java puede ser:

 List<Integer> ints = strings.stream() .filter(s -> s.matches("[0-9]+")) .map(Integer::valueOf) .collect(Collectors.toList());

Salidas

 [45, 3]

Más detalles

De la documentación:

fun String.toIntOrNull(): Int?

Analiza la cadena como un número Int y devuelve el result o null si la cadena no es una representación válida de un número.

Entonces, si queremos crear el código exacto en Java, puede usar:

 .map(s -> s.matches("[0-9]+") ? Integer.valueOf(s) : null)

Y luego:

mapNotNull

Devuelve una lista que contiene solo los resultados no nulos de aplicar el determinado

Lo que te lleva a usar en Java:

 .filter(Objects::nonNull)

su código final debe ser:

 List<Integer> ints = strings.stream() .map(s -> s.matches("[0-9]+") ? Integer.valueOf(s) : null) .filter(Objects::nonNull) .collect(Collectors.toList());

Pero la primera solución sigue siendo la mejor para su caso.

over 4 years ago · Santiago Trujillo Denunciar

0

Scanner es una buena manera de verificar la presencia de números enteros:

 List<String> strings = List.of("12a", "45", "", "3"); List<Integer> ints = strings.stream() .filter(it -> new Scanner(it).hasNextInt()) .map(Integer::parseInt) .collect(Collectors.toList()); System.out.println(ints); // [45, 3]
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda