En el sistema que estoy desarrollando, a menudo tengo que navegar por un árbol de objetos y, en función de su estado y valores, tomo medidas. En Java normal, esto da como resultado tediosos bucles for, if statements, etc ... ¿Hay formas alternativas de lograr la navegación en árbol, similar a XPath para XML? Sé que hay JXPath y OGNL, pero ¿conoces otras bibliotecas para tal fin? ¿Conoces alguna biblioteca que genere bytecodes para expresiones de navegación de árbol específicas para hacer el procesamiento tan rápido como fors y ifs nativos de Java?Idioma de navegación del árbol de objetos en Java
Respuesta
Las colecciones de Yakarta (http://commons.apache.org/collections/apidocs/) le permiten aplicar predicados, funtores, etc. en los miembros de la colección. ¿Es esta la dirección que estás buscando?
¿Puedo preguntarle por qué no le gustaría OGNL/JXPath? Obviamente, puede haber hecho su investigación para decir que no, pero me gustaría saber por qué OGNL no está resolviendo un propósito para el que fue diseñado.
También google-collections tiene algunos functors (además de las colecciones de commons mencionadas anteriormente) que pueden valer la pena mirar.
OGNL y JXPath usan la reflexión para interpretar el gráfico o las expresiones de navegación de árbol. En algunas situaciones, esto está bien, pero para mi caso de uso necesito una biblioteca que genere bytecodes para las expresiones de árbol para que sean tan rápidas como el código Java normal. – paweloque
Es posible que desee considerar Jakarta Bean Utils
String street = (String) PropertyUtils.getProperty(user, "address.street");
Usted puede navegar a través del gráfico de objetos utilizando una notación de punto. Puede acceder también a propiedades indexadas. Más detalles sobre los documentos.
Una desventaja es que Bean Utils espera que el gráfico que está navegando no contenga referencias nulas.
El siguiente fragmento de código sería lanzar una NPE
Person person = new Person();
person.setAddress(null);
String street = (String) PropertyUtils.getProperty(person, "address.street");
Para superar esta limitación mi equipo implementó una clase que crea instancias de todas las referencias nulas de un gráfico en la demanda. Este código se basa en la reflexión y los proxies dinámicos (CGLIB).
Eso es cierto, pero al usar los beanutils no es posible definir predicados en nodos o ejecutar funciones en valores. – paweloque
Entiendo, no capturé ese requisito. En ese caso, la sugerencia de David (Colecciones comunes) puede ser útil. Tiene una API de predicados (http://www.discursive.com/books/cjcook/reference/collections-sect-filtering.html), pero puede ser más detallado de lo que cabría esperar. También puede considerar Google Collections (http://code.google.com/p/google-collections/). Oí que también implementan filtrado por predicados –
- 1. Java mesa de oscilación del árbol
- 2. Navegación árbol de directorios de archivos estáticos en Node.js/expresar
- 3. Detección automática del idioma de un texto en Java (Android)
- 4. Idioma de Java para "tuberías"
- 5. ¿Cómo manipulo un árbol de objetos inmutables?
- 6. ¿Cómo almacenar estructuras de árbol en Java?
- 7. Árbol binario del árbol general
- 8. Implementación java segmento de árbol
- 9. API del árbol compilador de Java: ¿cómo lo configuro?
- 10. Generación de árbol de menú de Java USSD: cómo
- 11. ¿Cómo atravieso el árbol de objetos PDF en PDFSharp?
- 12. Visualización de árbol con Java
- 13. Implementación de árbol genérico en Java
- 14. Implementación existente del árbol Btree o B + en Java
- 15. ¿Es posible visualizar la estructura en árbol del código Java?
- 16. Biblioteca de traducción de idioma Java
- 17. Centro de búsqueda del árbol
- 18. Propósito del árbol de utilidades en ATAM
- 19. implementación del árbol de sufijos en python
- 20. Asignación de objetos Java
- 21. de dominio de recursos específicos del idioma
- 22. JS Navegación de objetos: cuándo usar object.sub y object ["sub"]?
- 23. Botón de retroceso del controlador de navegación
- 24. Reutilización de objetos Java
- 25. Biblioteca de visitantes del gráfico de objetos Java
- 26. Error serialización de un árbol de objetos con SplObjectStorage
- 27. salida del árbol en símbolo del sistema
- 28. Configuración del idioma del teclado del iPhone
- 29. Mejores prácticas para la inicialización del árbol de objetos MVC de Spring MVC
- 30. Vista de árbol WPF: ¿cómo implementar la navegación por teclado como en Explorer?
¿Encontró una buena solución para esto? – Andez