2010-10-13 22 views
5

Heredé un equipo y una base de código (Java).¿Qué biblioteca de Colecciones Java recomienda?

La base de código hace uso de muchos bucles explícitos for each. Me gustaría reemplazarlos (editar: en el código futuro) con algo como Commons Collections Transformers and Predicates y sus métodos de recopilación y transformación.

Sin embargo, Commons Collection no es genérica. El resto de mi código base, sea lo que sea que falte, es, y no quiero introducir mucho casting.

Así que estoy viendo los Commons-Collections with Generics (http://sourceforge.net/projects/collections/) y en Guava (anteriormente Google Collections) (http://code.google.com/p/guava-libraries /).

Pregunta uno: es una o ambas de las bibliotecas generalmente reconocidas como seguras para uso en producción? ¿Usas ya sea en producción?

Pregunta dos: de los dos, ¿cuál recomiendan? ¡Las respuestas de cualquiera que haya utilizado cualquiera de ellas son geniales, las respuestas de cualquiera que las haya usado tanto mejor!

Finalmente, mi equipo incluye una combinación de contratistas de nivel medio a superior y empleados de nivel medio y junior en Java (edición: pero con experiencia de varios años en programación no OO). Así que no quiero presentar más de una biblioteca de colecciones, y sí quiero una que no sea demasiado difícil de usar para mi equipo.

Gracias!

Editar: Quiero reemplazar los bucles explícitos porque la cantidad de repetición oculta y desborda el código comercial real. Tengo bucles anidados que invocan funciones con bucles anidados, todo para hacer cosas que son de una sola línea. Con la introducción y la capacitación adecuadas, creo que mi equipo encontrará un enfoque de Colecciones/Transformador/Predicado más limpio, más claro, más rápido de escribir y más fácil de leer.

+1

Las colecciones comunes realmente necesitan crear una versión Java5 si no quieren que todos se envíen a la guayaba. No me importa no tener genéricos y varargs en Commons Lang, pero para una biblioteca de colecciones, es esencial. – Thilo

+3

Relacionado: [Commons Collections vs Google Collections] (http://stackoverflow.com/questions/1444437/apache-commons-vs-google-collections). Todavía real IMO. También mire [esta película] (http://www.youtube.com/watch?v=ZeO_J2OcHYM). – BalusC

+2

¿Está reemplazando el código por el bien de reemplazar el código o porque falta algo en el estilo 'para cada uno 'que tiene hoy? –

Respuesta

4

Utilizo las colecciones de Google en producción y nunca he tenido un problema. Te hace desear que Java tenga punteros de función, pero su diseño está bien pensado. Incluso las pequeñas cosas como Lists.newArrayList se convierten en la forma estándar de actualizar una lista.

+0

"Hace que desees que Java tenga punteros de función". Java 8. dedos cruzados. – Thilo

+1

@Thilo: tal vez Java 10. Solo tal vez. –

+0

JDK7 (ahora 8, supongo) "incluye un nuevo paquete, java.dyn, que contiene las clases asociadas con el soporte de lenguaje dinámico en la plataforma Java. Una de las clases en el paquete es MethodHandle. Un método handle es un objeto simple de tipo java.dyn.MethodHandle que encapsula de forma anónima una referencia a un método JVM. Un identificador de método es invocable, al igual que una referencia con nombre a un método ". http://www.oracle.com/technetwork/issue-archive/2010/10-may/o30java-099612.html – Thilo

2

Parece que no está buscando una biblioteca de colección, sino una biblioteca para trabajar con colecciones existentes de forma funcional.

Escribí tal biblioteca yo mismo, pero no es de código abierto (solo se usa internamente en mi empresa), y puede que no sea la mejor diseñada.

Una biblioteca con el mismo objetivo parece prometedora: lambdaj. No lo he usado yo mismo, pero creo que no habría escrito mi biblioteca si supiera la existencia de lambdaj, en ese momento.

Cuestiones relacionadas