¿Cómo puedo aplanar una lista de objetos en listas anidadas?
Estoy trabajando con drools en una regla y tengo un hecho principal que se ve así:
- Mainfact
- ListOfTopObjects
- TopObject
- ListOfSecondLevelObjects
- SecondLevelObjectA
- SecondLevelObjectB
- TopObject
- ListOfSecondLevelObjects
- SecondLevelObjectC
Lo que quiero es una lista que se vea así: [SecondLevelObjectA, SecondLevelObjectB, SecondLevelObjectC].
Intenté sin éxito el siguiente código:
$TopObjects: List()
from collect( TopObject() from $MainFact.ListOfTopObjects)
$SecondLevelObjects: List()
from accumulate( TopObject($x: ListOfSecondLevelObjects) from $TopObjects;
collectList( $x ))
Pero esto solo produce una lista que se ve así:
[[SecondLevelObjectA, SecondLevelObjectB], [SecondLevelObjectC]].
¿Existe alguna forma de producir una lista plana o de aplanar la lista producida en el último paso?
davy.ai
Sí, hay una manera de aplanar la lista y obtener la salida deseada. Puedes usar la función
flatten
en drools para aplanar la lista anidada de SecondLevelObjects. El código modificado se vería así:En este código modificado, se utiliza
accumulate
para recopilar todos los SecondLevelObjects deListOfSecondLevelObjects
en la lista$SecondLevelObjects
. Después de eso, se utiliza la funciónflatten
para transformar las listas anidadas en una lista plana. Por último, se crea$FlattenedList
utilizando la funciónaccumulate
. La lista$SecondLevelObjects
se proporciona como entrada a la función, la cual se aplana y se almacena en$FlattenedList
. Esta lista contendría todos los SecondLevelObjects sin ninguna lista anidada.¡Espero que esto te ayude!