Tracks
/
Java
Java
/
Ejercicios
/
Operaciones con arrays
Operaciones con arrays

Operaciones con arrays

Difícil

Instrucciones

Implementa operaciones básicas de arrays.

En los lenguajes funcionales, las operaciones de arrays como length, map y reduce son muy comunes. Implementa una serie de operaciones básicas de arrays, sin usar funciones existentes.

El número exacto y los nombres de las operaciones que debes implementar dependerán del track, para evitar conflictos con nombres existentes, pero las operaciones generales que implementarás incluyen:

  • append (dados dos arrays, agrega todos los elementos del segundo array al final del primero);
  • concatenate (dada una serie de arrays, combina todos los elementos de todos los arrays en un solo array aplanado);
  • filter (dado un predicado y un array, devuelve el array de todos los elementos para los que predicate(item) es True);
  • length (dado un array, devuelve el número total de elementos que contiene);
  • map (dada una función y un array, devuelve el array de los resultados de aplicar function(item) a todos los elementos);
  • foldl (dadas una función, un array y un acumulador inicial, fold (reduce) cada elemento en el acumulador desde la izquierda);
  • foldr (dadas una función, un array y un acumulador inicial, fold (reduce) cada elemento en el acumulador desde la derecha);
  • reverse (dado un array, devuelve un array con todos los elementos originales, pero en orden inverso).

Ten en cuenta que el orden en el que se pasan los argumentos a las funciones fold (foldl, foldr) es importante.

Pistas

En Java se considera una buena práctica usar métodos de instancia en lugar de métodos de clase. Sin embargo, hay situaciones en las que es totalmente apropiado que una función sea static. Como las clases en Java están cerradas a la modificación (es decir, no puedes añadir miembros a una clase fuera de su definición como sí puedes en otros lenguajes como Ruby o JavaScript), no puedes añadir comportamiento nuevo a la clase directamente. ¿Qué hacer si aun así quieres definir comportamiento para un tipo dado? La solución idiomática en este caso es escribir un método de utilidad. A las colecciones de este tipo de métodos se las suele llamar «clases de utilidad». Algunos ejemplos de estas clases dentro del JRE son Arrays y Collections. En este ejercicio queremos que una List tenga métodos map(), reduce(), filter(), etc. No los tiene, así que usamos métodos estáticos.

Los métodos foldLeft y foldRight son funciones de «fold», un concepto bien conocido en el mundo de la programación funcional, pero menos en el de la orientada a objetos. Consulta la página de Wikipedia sobre folding para obtener contexto general y pistas sobre la firma y la implementación.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Java Exercism

¿Todo listo para empezar Operaciones con arrays?

Regístrate en Exercism para aprender y dominar Java con 26 conceptos158 ejercicios y mentoría humana real, todo gratis.

¡Profundiza en Operaciones con arrays!

Disfruta de una introducción práctica a la recursión, explora las alternativas imperativas y funcionales a Operaciones con arrays, y profundiza en la recursión de cola y las funciones acumuladoras.