# Possible to combine/flatten arrays using Painless?

**URL:** <https://discuss.elastic.co/t/possible-to-combine-flatten-arrays-using-painless/102494>\
**Category:** Elasticsearch\
**Created:** [October 2, 2017, 11:55pm UTC](https://discuss.elastic.co/t/possible-to-combine-flatten-arrays-using-painless/102494 "2017-10-02T23:55:02Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![loren](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/loren/32/44942_2.png) [@loren](https://discuss.elastic.co/u/loren)\
**Post date:** [October 2, 2017, 11:55pm UTC](https://discuss.elastic.co/t/possible-to-combine-flatten-arrays-using-painless/102494/1 "2017-10-02T23:55:02Z")

</div>

Is it possible to flatten an array using Painless? I'm essentially looking for this [Groovy flatten method](http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/Collection.html#flatten) in Painless.

---

<div class="post-metadata">

**Author:** ![loren](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/loren/32/44942_2.png) [@loren](https://discuss.elastic.co/u/loren)\
**Post date:** [October 3, 2017, 11:50pm UTC](https://discuss.elastic.co/t/possible-to-combine-flatten-arrays-using-painless/102494/2 "2017-10-03T23:50:36Z")

</div>

Here's what I'm doing in Groovy in 5.6:

```auto
      {
        "script": {
          "lang": "groovy",
          "source": "ctx.foo=ctx.foo.flatten().unique().sort()"
        }
      }

```

It works, but I'm admonished: `#! Deprecation: [groovy] scripts are deprecated, use [painless] scripts instead`.  
Well, how can I?

---

<div class="post-metadata">

**Author:** ![rjernst](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rjernst/32/6363_2.png) [@rjernst](https://discuss.elastic.co/u/rjernst)\
**Post date:** [October 4, 2017, 6:22am UTC](https://discuss.elastic.co/t/possible-to-combine-flatten-arrays-using-painless/102494/3 "2017-10-04T06:22:54Z")

</div>

You should look at java streams (which are exposed in painless), and specifically `flatMap()`.

---

<div class="post-metadata">

**Author:** ![loren](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/loren/32/44942_2.png) [@loren](https://discuss.elastic.co/u/loren)\
**Post date:** [October 4, 2017, 2:31pm UTC](https://discuss.elastic.co/t/possible-to-combine-flatten-arrays-using-painless/102494/4 "2017-10-04T14:31:31Z")

</div>

Thank you Ryan! I wasn't aware of how much Java was exposed via Painless.

```auto
      {
        "script": {
          "lang": "painless",
          "source": "ctx.foo=ctx.foo.stream().flatMap(l -> l.stream()).distinct().sorted().collect(Collectors.toList())"
        }
      }

```

That was Painless!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [November 1, 2017, 2:31pm UTC](https://discuss.elastic.co/t/possible-to-combine-flatten-arrays-using-painless/102494/5 "2017-11-01T14:31:34Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
