Команда ReQL: concatMap
Синтаксис команды
stream.concatMap(function) → stream array.concatMap(function) → array
Описание
Объединение одного или нескольких элементов в одну последовательность с помощью функции отображения.
concatMap работает аналогично команде map, применяя заданную функцию к каждому элементу в последовательности, но всегда возвращает одну последовательность. Если функция отображения возвращает последовательность, map создаст последовательность последовательностей:
r.expr(r.array(1, 2, 3)).map(x -> r.array(x, x.mul(2))).run(conn);
Результат:
[[1, 2], [2, 4], [3, 6]]
В то время как concatMap с той же функцией отображения объединит эти последовательности в одну:
r.expr(r.array(1, 2, 3)).concatMap(x -> r.array(x, x.mul(2))).run(conn);
Результат:
[1, 2, 2, 4, 3, 6]
Возвращаемое значение, массив или поток, будет иметь тот же тип, что и входные данные.
Пример: Построить последовательность всех монстров, побежденных героями Marvel. Поле «defeatedMonsters» — это массив из одного или нескольких имен монстров.
r.table("marvel").concatMap(hero -> hero.g("defeatedMonsters")).run(conn);
Пример: Моделирование eqJoin с использованием concatMap. (Вот как реализованы соединения ReQL внутри.)
r.table("posts").concatMap(
post -> r.table("comments").getAll(post.g("id")).optArg("index", "post_id")
.map(comment -> r.hashMap("left", post).with("right", comment))
).run(conn);
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/java/concat_map/