I have a value events of a type Map<number, List<Event>>, I am flattening this value like this:
const flatEvents = events.valueSeq().flatMap(event => event.values()).toList()
The value flatEvents looks like this after flattening:
[
{
"eventTime": "2022-03-18T08:04:00Z",
"type": "deviated",
"id": 841,
"createdAt": "2022-03-18T08:04:43.975332Z",
"createdBy": "47"
},
{
"eventTime": "2022-03-15T11:11:38.220966Z",
"type": "created",
"id": 826,
"createdAt": "2022-03-15T11:11:38.220966Z",
"createdBy": "47"
},
{
"eventTime": "2022-03-15T11:11:38.220966Z",
"id": 827,
"type": "created",
"createdAt": "2022-03-15T11:11:38.220966Z",
"createdBy": "47"
},
{
"eventTime": "2022-03-15T11:11:38.220966Z",
"type": "created",
"id": 828,
"createdAt": "2022-03-15T11:11:38.220966Z",
"createdBy": "47"
}
]
But, I would also like to filter out all the extra elements that have type = created, so that I end up with a list that has only one element where type == created:
[
{
"eventTime": "2022-03-18T08:04:00Z",
"type": "deviated",
"id": 841,
"createdAt": "2022-03-18T08:04:43.975332Z",
"createdBy": "47"
},
{
"eventTime": "2022-03-15T11:11:38.220966Z",
"type": "created",
"id": 826,
"createdAt": "2022-03-15T11:11:38.220966Z",
"createdBy": "47"
}
]
I have tried to do it like this:
const flatEvents = events.valueSeq()
.flatMap(event => event.values()).toList()
.filter((v, _, list) =>
list.find(v => v.get('type') === 'created'))
But, that is returning the same list as before. I have also tried this:
const flatEvents = events.valueSeq()
.flatMap(event => event.values()).toList()
.filter((_,i,flattenedEvents) =>
flattenedEvents.findIndex(consignmentEvent => (consignmentEvent.get('type') === 'created')) === i
)
That filters out extra elements with the type === 'created', but also other elements, so I end up with only this:
[
{
"eventTime": "2022-03-18T08:04:00Z",
"type": "deviated",
"id": 841,
"createdAt": "2022-03-18T08:04:43.975332Z",
"createdBy": "47"
},
]
How can I achieve this?