Как сделать список результатов GroupBy для новой карты в Webflux - PullRequest
0 голосов
/ 24 марта 2020

Как сделать список результатов GroupBy для новой карты в Webflux

Есть мой список ввода и ожидаемый результат. тогда что я должен сделать, чтобы получить результат.

// expect
{
    "timestamp": "2019-06-13T00:00:00.000",
    "result": {
        "first": 1,
        "second": 2,
        "third": 3
    }
}

// input list
[
    {
        "timestamp": "2019-06-13T00:00:00.000",
        "first": 1
    },
    {
        "timestamp": "2019-06-13T00:00:00.000",
        "second": 2
    },
    {
        "timestamp": "2019-06-13T00:00:00.000",
        "third": 3
    }
]

val Flux.fromIterable(list)
   .groupBy{it.timestamp}
   .concatMap { groupItem ->

     // here!! I want to make `group by result list to new Map``
     Result(timestamp = groupItem.key()!!, Item(first = ?, second = ?, third =?))
   }

1 Ответ

0 голосов
/ 25 марта 2020

Я разобрался.

Flux.merge(first, second, thrid)
    .groupBy { it.timestamp }
    .concatMap {
        it.map { item ->
            val container = mutableMapOf<String, Any>()
            if (item is firstEntity) {
                container["first"] = item.result.count
                container["timestamp"] = it.key()!!
            }
            if (item is secondEntity) container["second"] = item.result.count
            if (item is thridEntity) container["thrid"] = item.result.count
            container
        }.reduce { acc, current ->
            acc.putAll(current)
            acc
        }
    }
    .map {
        val first = (it["first"] ?: 0) as Int
        val second = (it["second"] ?: 0) as Int
        val thrid = (it["thrid"] ?: 0) as Int
        val timestamp = (it["timestamp"] ?: "") as String

        // somthing!!
    }
...