¿Tiene la biblioteca estándar de Java alguna estructura de datos funcional, como conjuntos inmutables, listas, etc., con actualización funcional?Estructuras de datos funcionales en Java
Respuesta
Functional java tiene Sets, Lists y abstracciones más interesantes.
+1 por ser la única respuesta correcta aquí. –
ordenado, esto parece prometedor. ¡Gracias! – Claudiu
Parece que está buscando Scala. Se compila para .class, así que es suficiente, ¿verdad?
hmm quizás. Es solo que obtuvimos un código de soporte en un curso que funciona de manera funcional (es decir, agregar algo a una estructura devuelve una nueva versión con la actualización), pero está escrito simplemente copiando la estructura anterior y añadiéndole algo nuevo. Eso me hace triste. Me preguntaba si había una manera fácil, mejor, pero creo que Java solo lo hace difícil. – Claudiu
No necesita scala. Sólo tiene que pasar su colección en:
java.util.Collections.unmodifiableCollection(/* Collection<? extends T> c */);
java.util.Collections.unmodifiableSet(Set s);
java.util.Collections.unmodifiableMap(Map m);
java.util.Collections.unmodifiableList(List l);
acabo de ver esto desde otro SO pregunta:
de Google ImmutableSet
de los documentos:
A diferencia Colecciones .unmodifiableSet (java.util.Set), que es una vista de una colección separada que aún puede cambiar, una instancia de esta clase contiene sus propios datos privados y nunca cambiará . Esta clase es conveniente para los conjuntos finales estáticos públicos ("conjuntos constantes") y también le permite hacer fácilmente una "copia defensiva" de un conjunto proporcionado por su interlocutor a .
editado para incorporar comentario.
+1: Usted fue más rápido =) También hay '' unmodifiableList() ',' unmodifiableMap() ', y más métodos disponibles en la API' java.util.Collections': http://java.sun.com /javase/6/docs/api/java/util/Collections.html – BalusC
Quiero agregar algo a un conjunto, mantener el mismo conjunto anterior y devolver un nuevo conjunto. No creo que no modificable. Set me da eso? – Claudiu
@Claudiu sí, unmodifiableSet definitivamente no hará eso. –
Bueno, hay dos enfoques posibles para "Cambio" una colección inmutable:
Haga una copia de la misma que incluye el "cambio"
Crear un nuevo objeto, diferente, que consiste de una referencia al objeto original y una referencia a una descripción del cambio.
Clojure toma el último enfoque, o sea que es bastante rápido para crear una gran cantidad de hermanos de una colección original con correcciones menores en cada una, con los requisitos de memoria razonables. Pero la mayoría del código Java tiende a ir por la primera opción.
Por lo que vale, Google ha creado un puñado de colecciones que admiten la programación de estilo funcional: http://code.google.com/p/google-collections/ pero no las he analizado en profundidad.
Eche un vistazo a Google collections.
Las cadenas y los números son inmutables de una manera funcional, pero la mayoría de las colecciones no lo son (las colecciones inmutables arrojan excepciones en agregar, eliminar, etc.). CopyOnWriteArrayList
y CopyOnWriteArraySet
son los más cercanos en ese sentido.
Siempre es bueno ver Google Collections enchufado, pero no, no tenemos esto. No sé de ninguna biblioteca de Java que lo haga. Dentro de Google, implementamos algunas estructuras de listas funcionales, ¿y adivinen qué? Nadie los usa.Por lo tanto, no es probable que se conviertan en fuentes abiertas en el corto plazo.
Si usted está interesado en las colecciones de la manipulación con un estilo funcional dar un vistazo a lambdaj
Tener un vistazo a la pcollections proyecto:
PCollections sirve como un análogo persistente e inmutable de las colecciones de Java Marco de referencia. Esto incluye pilas, mapas, vectores, conjuntos y bolsas eficientes, seguros para hilos, genéricos, inmutables y persistentes, compatibles con sus homólogos de colecciones Java.
Los tipos de datos permanentes e inmutables son cada vez más apreciados como una alternativa simple, amigable con el diseño, amigable con la concurrencia y, a veces más eficiente en tiempo y espacio, a los tipos de datos mutables.
Sé que esta es una vieja pregunta, pero un poco de búsqueda me dice que ahora tenemos una alternativa para Java funcional.
JavasLang parece una biblioteca interesante para la programación declarativa y las estructuras de datos funcionales en Java.
No lo he comparado con Functional Java en términos de facilidad de uso y rendimiento, pero me gustaría obtener algunos consejos sobre eso.
- 1. Estructuras de datos funcionales en C++
- 2. Estructuras de datos puramente funcionales con copy-on-write?
- 3. Estructuras de datos Trie - Java
- 4. Estructuras de datos autorreferenciales en Lisp/Scheme
- 5. Administración de actualizaciones para estructuras de datos inmutables anidadas en lenguajes funcionales
- 6. C# estructuras de datos
- 7. Delphi estructuras de datos
- 8. Conversión de colecciones Java en estructuras de datos Clojure
- 9. Estructuras de datos en Python
- 10. Estructuras de datos en lisp
- 11. Estructuras de datos pregunta
- 12. ¿Cómo almacenar estructuras de árbol en Java?
- 13. pasando estructuras de datos de java a perl
- 14. biblioteca de estructuras de datos de JavaScript
- 15. Método de filtro para estructuras de datos C++
- 16. Erlang estructuras de datos persistentes
- 17. Algoritmos y estructuras de datos
- 18. Estructuras de datos para bioinformática
- 19. Estructuras de datos complejas Redis
- 20. Estructuras de datos persistentes en Scala
- 21. Estructuras de datos avanzadas en la práctica
- 22. Estructuras de datos importantes en la búsqueda
- 23. estructuras de datos fundamentales en C#
- 24. Estructuras de datos persistentes en C++
- 25. Guardar estructuras de datos en C#
- 26. Estructuras de datos espaciales en C
- 27. estructuras Almacenamiento de MATLAB en objetos Java
- 28. Haskell: barajando datos sin dependencias funcionales
- 29. Reimplementación de estructuras de datos en el mundo real
- 30. ¿cómo puedo convertir estructuras de datos ruby a estructuras de datos javascript con .js.erb?
¿Desea una copia profunda de todos los objetos de la lista o simplemente una función que le proporcione una nueva lista de punteros a los mismos objetos que la fuente? –
Quiero una estructura de datos persistente para un conjunto no implementado de una manera tonta. Por ejemplo, una lista inmutable podría implementar agregando copiando todos los elementos en una nueva lista y agregando el elemento - O (n). O podría ser una lista vinculada, agregar el elemento al encabezado y devolver el encabezado: O (1) – Claudiu
, no existe una forma general de "copiar en profundidad" nada en Java. –