Перейти к основному содержимому
Руководство администратора
How To статьи
Установка и настройка
Компоненты
Руководство пользователя
Начало работы

Функции для работы с массивами и списками

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. Разделителем по умолчанию является запятая.