# Reduce array elements > Supported in: Batch, Streaming Reduces array elements using an expression. **Expression categories:** Array ## Declared arguments * **Array:** Array to reduce.
*Expression\ | Short | String | Timestamp> | Boolean | Byte | Date | Double | Float | Integer | Long | Map\ | Short | String | Timestamp>>* * **Expression to reduce:** The expression to apply once per element of the array.
*Expression\* * **Initial value:** This is the start value used to initialize the accumulator, if the array has a length of 0, this value will be returned.
*Expression\* **Type variable bounds:** *T accepts Array\ | Short | String | Timestamp> | Boolean | Byte | Date | Double | Float | Integer | Long | Map\ | Short | String | Timestamp* **Output type:** *T* ## Examples ### Example 1: Base case **Argument values:** * **Array:** `miles` * **Expression to reduce:**
add(
 expressions: \[`accumulator`, `element`],
) * **Initial value:** 0 | miles | **Output** | | ----- | ----- | | \[ 12300, 12342 ] | 24642 | *** ### Example 2: Base case **Description:** Return the first non null within the array. **Argument values:** * **Array:** `miles` * **Expression to reduce:**
firstNonNull(
 expressions: \[`accumulator`, `element`],
) * **Initial value:** `init` | miles | init | **Output** | | ----- | ----- | ----- | | \[ *null*, *null*, 12300, 12111 ] | *null* | 12300 | *** ### Example 3: Base case **Argument values:** * **Array:** `miles` * **Expression to reduce:**
concatStrings(
 expressions: \[`accumulator`,
cast(
 expression: `element`,
 type: String,
)],
 separator: -,
) * **Initial value:** *empty string* | miles | **Output** | | ----- | ----- | | \[ 12300, 12342 ] | -12300-12342 | *** ### Example 4: Null case **Description:** Null arrays will return null outputs. **Argument values:** * **Array:** `miles` * **Expression to reduce:**
firstNonNull(
 expressions: \[`accumulator`, `element`],
) * **Initial value:** `init` | miles | init | **Output** | | ----- | ----- | ----- | | *null* | *null* | *null* | *** ### Example 5: Edge case **Description:** Empty array will return the initial value. **Argument values:** * **Array:** `miles` * **Expression to reduce:**
add(
 expressions: \[`accumulator`, `element`],
) * **Initial value:** 0 | miles | **Output** | | ----- | ----- | | \[ ] | 0 | ***