Функции для работы с массивами и списками
Bercut ESB поддерживает работу с данными, структурированными в виде массивов и списков, для которых можно применять функции Simple, описанные ниже.
| Функция | Тип ответа | Описание |
|---|---|---|
collate(size) | Iterator<List> | Группирует данные из тела сообщения в подгруппы (подсписки) заданного размера. На выходе получается итератор, который последовательно возвращает эти подгруппы. Это можно использовать с компонентом Split для разделения тела сообщения и группировки/пакетирования разделенных подсообщений в группу из N подсписков. Этот метод работает аналогично методу collate в Groovy.Предположим, у вас есть тело сообщения, содержащее список из 9 элементов. Тогда использование ${collate(2)} преобразует это в java.util.Iterator, который будет возвращать каждый подсписок. Поскольку на входе 9 элементов, на выходе будет 5 подсписков по 2, 2, 2, 2 и 1 элементу. |
distinct(val1,val2,...) | Set | Возвращает набор всех значений с удаленными дубликатами. Функция принимает одно или несколько значений в качестве входных данных и затем возвращает Set только с уникальными значениями. Входными значениями могут быть отдельные объекты, массивы или списки. Если значения не указаны, функция ${distinct()} будет использовать тело сообщения в качестве входных данных. Например, ${distinct('Z','X','Z','A','B','A','C','D','B','E')} вернет Set со значениями [Z, X, A, B, C, D, E]. |
forEach(exp,fun) | <List> | Возвращает список, содержащий значения, возвращенные функцией при применении к каждому значению из входного выражения. Функция подобна циклу for, который перебирает входные значения и применяет функцию к каждому элементу, агрегируя их ответы в List в качестве результата.Например, предположим, что тело сообщения содержит строку, разделенную запятыми, Center,World,Cheese, тогда выполнение ${forEach(\${body},'Hello ${body}')} вернет список из 3 значений: ["Hello Center", "Hello World", "Hello Cheese"]. |
list(val1,val2,...) | List | Создает java.util.ArrayList с заданным набором значений.Функция используется для приема всех входных значений и помещения их в один List в качестве ответа.Например, если тело сообщения содержит '4', то ${list(1,2,3,\${body})} вернет список из 4 элементов: [1,2,3,4]. |
map(key1,value1,...) | Map | Создает java.util.LinkedHashMap с заданным набором пар.Функция похожа на функцию list, но для создания Map, где значения группируются парами по 2. Например, ${map(1,a,2,b,3,c)} вернет карту с 3 элементами {1=a, 2=b, 3=c}. |
createEmpty(kind) | <T> | Создает новый пустой объект указанного вида: String, List, Map или Set. Тип string создает пустой объект String. Тип list создает пустой ArrayList, а map создает пустой объект LinkedHashMap. Используйте set для создания пустого java.util.LinkedHashSet.Чтобы создать пустую Map, используйте \${createEmpty(map)}. |
reverse(val1,val2,...) | List | Возвращает список всех значений, но в обратном порядке. Например, \${reverse(1,2,3,4,5)} вернет List со значениями 5,4,3,2,1. |
shuffle(val1,val2,...) | List | Возвращает список всех значений, перемешанных в случайном порядке. |
size() | int | Возвращает количество элементов в теле сообщения на основе коллекции или массива. Если значение равно null, возвращается 0, в противном случае 1. Например, если тело сообщения содержит List из 7 элементов, то ${size()} вернет 7. С другой стороны, если тело сообщения содержит InputStream, результат будет 1, а когда тело равно null, возвращается 0. Для строковых полезных нагрузок, таких как ${size('Hello World')}, всегда возвращается 1. |
size(exp) | int | Возвращает количество элементов в значении на основе коллекции (Collection) или массива. Если значение равно null, возвращается 0, в противном случае 1. |
skip(number) | Iterator | Перебирает тело сообщения и пропускает первое количество элементов. Это можно использовать с компонентом Split для разделения тела сообщения и пропуска первых N элементов. Например, у вас есть CSV-файл, содержащий строку заголовка, и вы хотите пропустить эту строку, тогда вы можете использовать ${skip(1)}, который затем возвращает Iterator, начинающийся со 2-й строки. |
split(separator) | String[] | Разделяет тело сообщения как значение String, используя разделитель, в массив String. Разделителем по умолчанию является запятая.Например, если тело сообщения является CSV-данными, то использование ${split(\\n)} (вам нужно экранировать символ новой строки) разделит это на String[], разделенный новой строкой. |
split(exp,separator) | String[] | Разделяет выражение как значение String, используя разделитель, в массив String. Разделителем по умолчанию является запятая. |