DataWeave Delight: Finding highest or lowest value in an array
DataWeave has several function to find the highest or lowest value in an array. The items in the array need to be of the same type and implement the Comparable
interface. To find the highest value we can use the max
function. The function returns the maximum value based on the type of the item in the array. If we want to find the highest value based on other criteria we can use the maxBy
function. This function takes a lambda as last argument where we can return a Comparable
value that is used to determine the highest value. To find the lowest value in an array we have similar functions: min
and minBy
.
In the following example we use several ways to find the highest and lowest value in arrays with items of different types:
Source
%dw 2.0
// Array with numbers
var numbers = [10, 2, 3, 1, 20]
// Array with string values
var languages = ["DataWeave", "Java", "Groovy", "Clojure"]
// Array with objects representing a user
var users = [
{ name: "mrhaki", age: 47 },
{ name: "alice", age: 32 },
{ name: "bob", age: 61 }
]
output application/json
---
{
// Find maximum for numbers
maxNumbers: max(numbers),
// Find minimum for numbers
minNumbers: min(numbers),
// Find max for srings looks at first character
maxLanguages: max(languages),
// Find min for strings looks at first character
minLanguages: min(languages),
// Find language with max length
maxByLength1: maxBy(languages, (lang) -> sizeOf(lang)),
// Find max with infix notation
maxByLength2: languages maxBy (lang) -> sizeOf(lang),
// Find max with infix notation and $ to reference lambda argument
maxByLength3: languages maxBy sizeOf($),
// Find language with minimal length
minByLength: languages minBy ((lang) -> sizeOf(lang)),
// Find oldest user with maxBy on objects
oldestUser: users maxBy ((user) -> user.age),
// Find youngest user with minBy on objects
youngestUser: users minBy (user) -> user.age
}
Output
{
"maxNumbers": 20,
"minNumbers": 1,
"maxLanguages": "Java",
"minLanguages": "Clojure",
"maxByLength1": "DataWeave",
"maxByLength2": "DataWeave",
"maxByLength3": "DataWeave",
"minByLength": "Java",
"oldestUser": {
"name": "bob",
"age": 61
},
"youngestUser": {
"name": "alice",
"age": 32
}
}
Written with DataWeave 2.4.
DataWeave is a functional language designed by MuleSoft for transforming data structures defined in for example JSON, XML or CSV. |