++ | MuleSoft Documentation
# ++
## ++<S, T>(source: Array<S>, with: Array<T>): Array<S | T>
Concatenates two values.
This version of `++` concatenates the elements of two arrays into a new array. Other versions act on strings, objects, and the various date and time formats that DataWeave supports.
If the two arrays contain different types of elements, the resulting array is all of `S` type elements of `Array<S>` followed by all the `T` type elements of `Array<T>`. Either of the arrays can also have mixed-type elements. Also note that the arrays can contain any supported data type.
### Parameters
Name | Description  
---|---  
The source array.  
The array to concatenate with the source array.  
### Example
The example concatenates an `Array<Number>` with an `Array<String>`. Notice that it outputs the result as the value of a JSON object.
#### Source
```
%dw 2.0
output application/json
---
{ "result" : [0, 1, 2] ++ ["a", "b", "c"] }
```

#### Output
```
{ "result": [0, 1, 2, "a", "b", "c"] }
```

### Example
#### Source
```
%dw 2.0
output application/json
---
{ "a" : [0, 1, true, "my string"] ++ [2, [3,4,5], {"a": 6}] }
```

#### Output
```
{ "a": [0, 1, true, "my string", 2, [3, 4, 5], { "a": 6}] }
```

## ++(source: String, with: String): String
Concatenates the characters of two strings.
Strings are treated as arrays of characters, so the `++` operator concatenates the characters of each string as if they were arrays of single-character string.
### Parameters
Name | Description  
---|---  
The source string.  
The string to concatenate with the source string.  
### Example
This example concatenates two strings. Here, `Mule` is treated as `Array<String> ["M", "u", "l", "e"]`. Notice that the example outputs the result `MuleSoft` as the value of a JSON object.
#### Source
```
%dw 2.0
output application/json
---
{ "name" : "Mule" ++ "Soft" }
```

#### Output
```
{ "name": "MuleSoft" }
```

## ++<T <: Object, Q <: Object>(source: T, with: Q): T & Q
Concatenates two objects and returns one flattened object.
The `++` operator extracts all the key-values pairs from each object, then combines them together into one result object.
### Parameters
Name | Description  
---|---  
The source object.  
The object to concatenate with the source object.  
### Example
This example concatenates two objects and transforms them to XML. Notice that it flattens the array of objects `{aa: "a", bb: "b"}` into separate XML elements and that the output uses the keys of the specified JSON objects as XML elements and the values of those objects as XML values.
#### Source
```
%dw 2.0
output application/xml
---
{ concat : {aa: "a", bb: "b"} ++ {cc: "c"} }
```

#### Output
```
<?xml version="1.0" encoding="UTF-8"?>
<concat>
 <aa>a</aa>
 <bb>b</bb>
 <cc>c</cc>
</concat>
```

## ++(date: Date, time: LocalTime): LocalDateTime
Appends a `LocalTime` with a `Date` to return a `LocalDateTime` value.
`Date` and `LocalTime` instances are written in standard Java notation, surrounded by pipe (`|`) symbols. The result is a `LocalDateTime` object in the standard Java format. Note that the order in which the two objects are concatenated is irrelevant, so logically, `Date LocalTime` produces the same result as `LocalTime Date`.
### Parameters
Name | Description  
---|---  
A `LocalTime`, a time format without a time zone.  
### Example
This example concatenates a `Date` and `LocalTime` object to return a `LocalDateTime`.
#### Source
```
%dw 2.0
output application/json
---
{ "LocalDateTime" : (|2017-10-01| ++ |23:57:59|) }
```

#### Output
```
{ "LocalDateTime": "2017-10-01T23:57:59" }
```

## ++(time: LocalTime, date: Date): LocalDateTime
Appends a `LocalTime` with a `Date` to return a `LocalDateTime`.
Note that the order in which the two objects are concatenated is irrelevant, so logically, `LocalTime Date` produces the same result as `Date LocalTime`.
### Parameters
Name | Description  
---|---  
A `LocalTime`, a time format without a time zone.  
### Example
This example concatenates `LocalTime` and `Date` objects to return a `LocalDateTime`.
#### Source
```
%dw 2.0
output application/json
---
{ "LocalDateTime" : (|23:57:59| ++ |2003-10-01|) }
```

#### Output
```
{ "LocalDateTime": "2017-10-01T23:57:59" }
```

## ++(date: Date, time: Time): DateTime
Appends a `Date` to a `Time` in order to return a `DateTime`.
Note that the order in which the two objects are concatenated is irrelevant, so logically, `Date` + `Time` produces the same result as `Time` + `Date`.
### Parameters
Name | Description  
---|---  
A `Time`, a time format that can include a time zone (`Z` or `HH:mm`).  
### Example
This example concatenates `Date` and `Time` objects to return a `DateTime`.
#### Source
```
%dw 2.0
output application/json
---
[ |2017-10-01| ++ |23:57:59-03:00|, |2017-10-01| ++ |23:57:59Z| ]
```

#### Output
```
[ "2017-10-01T23:57:59-03:00", "2017-10-01T23:57:59Z" ]
```

## ++(time: Time, date: Date): DateTime
Appends a `Date` to a `Time` object to return a `DateTime`.
Note that the order in which the two objects are concatenated is irrelevant, so logically, `Date` + `Time` produces the same result as a `Time` + `Date`.
### Parameters
Name | Description  
---|---  
A `Time`, a time format that can include a time zone (`Z` or `HH:mm`).  
### Example
This example concatenates a `Date` with a `Time` to output a `DateTime`. Notice that the inputs are surrounded by pipes (`|`).
#### Source
```
%dw 2.0
output application/json
---
|2018-11-30| ++ |23:57:59+01:00|
```

#### Output
```
"2018-11-30T23:57:59+01:00"
```

### Example
This example concatenates `Time` and `Date` objects to return `DateTime` objects. Note that the first `LocalTime` `object is coerced to a `Time`. Notice that the order of the date and time inputs does not change the order of the output `DateTime`.
#### Source
```
%dw 2.0
output application/json
---
{
 "DateTime1" : (|23:57:59| as Time) ++ |2017-10-01|,
 "DateTime2" : |23:57:59Z| ++ |2017-10-01|,
 "DateTime3" : |2017-10-01| ++ |23:57:59+02:00|
}
```

#### Output
```
{
 "DateTime1": "2017-10-01T23:57:59Z",
 "DateTime2": "2017-10-01T23:57:59Z",
 "DateTime3": "2017-10-01T23:57:59+02:00"
}
```

## ++(date: Date, timezone: TimeZone): DateTime
Appends a `TimeZone` to a `Date` type value and returns a `DateTime` result.
### Parameters
Name | Description  
---|---  
A `TimeZone` (`Z` or `HH:mm`).  
### Example
This example concatenates `Date` and `TimeZone` (`-03:00`) to return a `DateTime`. Note the local time in the `DateTime` is `00:00:00` (midnight).
#### Source
```
%dw 2.0
output application/json
---
{ "DateTime" : (|2017-10-01| ++ |-03:00|) }
```

#### Output
```
{ "DateTime": "2017-10-01T00:00:00-03:00" }
```
#### Output
```
{
 "DateTime1": "2017-10-01T23:57:59Z",
 "DateTime2": "2017-10-01T23:57:59Z",
 "DateTime3": "2017-10-01T23:57:59+02:00"
}
```

## ++(date: Date, timezone: TimeZone): DateTime
Appends a `TimeZone` to a `Date` type value and returns a `DateTime` result.
### Parameters
Name | Description  
---|---  
A `TimeZone` (`Z` or `HH:mm`).  
### Example
This example concatenates `Date` and `TimeZone` (`-03:00`) to return a `DateTime`. Note the local time in the `DateTime` is `00:00:00` (midnight).
#### Source
```
%dw 2.0
output application/json
---
{ "DateTime" : (|2017-10-01| ++ |-03:00|) }
```

#### Output
```
{ "DateTime": "2017-10-01T00:00:00-03:00" }
```

## ++(timezone: TimeZone, date: Date): DateTime
Appends a `Date` to a `TimeZone` in order to return a `DateTime`.
### Parameters
Name | Description  
---|---  
A `TimeZone` (`Z` or `HH:mm`).  
### Example
This example concatenates `TimeZone` (`-03:00`) and `Date` to return a `DateTime`. Note the local time in the `DateTime` is `00:00:00` (midnight).
#### Source
```
%dw 2.0
output application/json
---
{ "DateTime" : |-03:00| ++ |2017-10-01| }
```

#### Output
```
{ "DateTime": "2017-10-01T00:00:00-03:00" }
```

## ++(dateTime: LocalDateTime, timezone: TimeZone): DateTime
Appends a `TimeZone` to a `LocalDateTime` in order to return a `DateTime`.
### Parameters
Name | Description  
---|---  
A `LocalDateTime`, a date and time without a time zone.  
A `TimeZone` (`Z` or `HH:mm`).  
### Example
This example concatenates `LocalDateTime` and `TimeZone` (`-03:00`) to return a `DateTime`.
#### Source
```
%dw 2.0
output application/json
---
{ "DateTime" : (|2003-10-01T23:57:59| ++ |-03:00|) }
```

#### Output
```
{ "DateTime": "2003-10-01T23:57:59-03:00 }
```

## ++(timezone: TimeZone, datetime: LocalDateTime): DateTime
Appends a `LocalDateTime` to a `TimeZone` in order to return a `DateTime`.
### Parameters
Name | Description  
---|---  
A `LocalDateTime`, a date and time without a time zone.  
A `TimeZone` (`Z` or `HH:mm`).  
### Example
This example concatenates `TimeZone` (`-03:00`) and `LocalDateTime` to return a `DateTime`.
#### Source
```
%dw 2.0
output application/json
---
{ "TimeZone" : (|-03:00| ++ |2003-10-01T23:57:59|) }
```

#### Output
```
{ "TimeZone": "2003-10-01T23:57:59-03:00" }
```

## ++(time: LocalTime, timezone: TimeZone): Time
Appends a `TimeZone` to a `LocalTime` in order to return a `Time`.
### Parameters
Name | Description  
---|---  
A `LocalTime`, time format without a time zone.  
A `TimeZone` (`Z` or `HH:mm`).  
### Example
This example concatenates `LocalTime` and `TimeZone` (`-03:00`) to return a `Time`. Note that the output returns`:00` for the unspecified seconds.
#### Source
```
%dw 2.0
output application/json
---
{ "Time" : (|23:57| ++ |-03:00|) }
```

#### Output
```
{ "Time": "23:57:00-03:00" }
```

## ++(timezone: TimeZone, time: LocalTime): Time
Appends a `LocalTime` to a `TimeZone` in order to return a `Time`.
### Parameters
Name | Description  
---|---  
A `LocalTime`, a time format without a time zone.  
A `TimeZone` (`Z` or `HH:mm`).  
### Example
This example concatenates `TimeZone` (`-03:00`) and `LocalTime` to return a `Time`. Note that the output returns`:00` for the unspecified seconds.
#### Source
```
%dw 2.0
output application/json
---
{ "Time" : (|-03:00| ++ |23:57|) }
```

#### Output
```
{
 "Time": "23:57:00-03:00"
}
```