2010-10-13 16 views
5

Ho ereditato un team e una base di codice (Java).Che libreria di librerie Java consigliate?

Il codice base utilizza numerosi loop espliciti for each. Mi piacerebbe sostituirli (modifica: nel futuro codice) con qualcosa come Commons Collections Transformers and Predicates e i suoi metodi di raccolta e trasformazione.

Tuttavia, Comuni Collection non è generica. Il resto della mia base di codice, qualunque altra cosa manchi, è, e non voglio introdurre un sacco di casting.

Quindi guardo le raccolte delle opere di Commons con Generics (http://sourceforge.net/projects/collections/) ea Guava (in precedenza Google Collections) (http://code.google.com/pp/guava-librerie /).

Prima domanda: è una o entrambe queste librerie generalmente riconosciuto come sicuro per l'uso in produzione? Usi o in produzione?

Domanda due: dei due, che mi consiglia? Le risposte di chiunque abbia usato entrambe sono ottime, le risposte di chiunque abbia usato entrambe le cose ancora meglio!

Infine, il mio team include un gruppo di appaltatori di livello medio-alto e dipendenti di livello medio e junior in Java (modifica: ma con esperienza pluriennale nella programmazione non OO). Quindi non voglio introdurre più di una raccolta di raccolte, e ne voglio una che non sarà troppo difficile da usare per nessuna delle mie squadre.

Grazie!

Modifica: Voglio sostituire i cicli espliciti perché la quantità di boilerplate oscura e travolge il codice aziendale effettivo. Ho cicli nidificati che chiamano funzioni con cicli nidificati, tutto per fare cose che sono one-liner. Con la presentazione e l'addestramento corretti, ritengo che il mio team troverà un approccio Collections/Transformer/Predicate più pulito, più chiaro, più veloce da scrivere e più facile da leggere.

+1

Le raccolte di Commons hanno davvero bisogno di creare una versione Java5 se non vogliono che tutti saltino la nave a Guava. Non mi dispiace molto di non avere generici e vararg in Commons Lang, ma per una libreria di collezioni, è essenziale. – Thilo

+3

correlati: [Raccolte di Commons vs Google Collections] (http://stackoverflow.com/questions/1444437/apache-commons-vs-google-collections). IMO ancora attuale. Guarda anche [questo film] (http://www.youtube.com/watch?v=ZeO_J2OcHYM). – BalusC

+2

Sostituisci il codice per sostituire il codice o perché manca qualcosa nello stile "per ciascuno" che hai oggi? –

risposta

4

utilizzare collezioni di Google nella produzione e non hanno mai avuto un problema. Ti fa desiderare che java abbia dei puntatori alle funzioni, ma il design è ben pensato. Persino le piccole cose come Lists.newArrayList diventano il modo standard per rinnovare una lista.

+0

"Ti piacerebbe che Java avesse dei puntatori di funzione". Java 8. Incrocio delle dita. – Thilo

+1

@Thilo: forse Java 10. Solo forse. –

+0

JDK7 (ora 8, credo) "include un nuovo pacchetto, java.dyn, che contiene le classi associate al supporto dinamico della lingua nella piattaforma Java Una delle classi nel pacchetto è MethodHandle. Un handle di metodo è un oggetto semplice di tipo java.dyn.MethodHandle che incapsula in modo anonimo un riferimento a un metodo JVM. Un handle di metodo è callable, proprio come un riferimento a un metodo. " http://www.oracle.com/technetwork/issue-archive/2010/10-may/o30java-099612.html – Thilo

2

Sembra che non siete alla ricerca di una libreria Collection, ma piuttosto una libreria per lavorare con le collezioni esistenti in modo functionnal.

Ho scritto una tale libreria da solo, ma non è open source (è utilizzato solo internamente nella mia azienda) e potrebbe non essere il migliore progettato.

Una biblioteca con lo stesso obiettivo sembra promettente: lambdaj. Non l'ho usato da solo, ma penso che non avrei scritto la mia biblioteca se fossi a conoscenza dell'esistenza di lambdaj, in quel momento.