Skip to main content
Glama
03.数组&集合.md8.42 kB
--- title: "数组&集合" date: "2022-01-30T10:26:15.000Z" permalink: "/pages/extension/collection/" --- # 为Collection,Iterator,Enumeration,Object[] 添加的扩展方法 # map * 入参:function:Function 接收一个Lambda表达式 * 返回值:Object * 函数说明:将集合进行循环转换 var list = [1,2,3,4,5]; return list.map(e=>e+1); //返回[2,3,4,5,6] # filter * 入参:function:Function 接收一个Lambda表达式 * 返回值:Object * 函数说明:将集合进行过滤 var list = [1,2,3,4,5]; return list.filter(e=>e>3); //返回[4,5] return list.filter((item,index)=>index>1); //返回[3,4,5] # each * 入参:function:Function 接收一个Lambda表达式 * 返回值:Object * 函数说明:循环处理 var list = [{ name : '小明' },{ name : '小花' }]; return list.each(item=>item.put('age',18)); //循环添加age属性 # sort * 入参:function:Function 接收一个Lambda表达式 * 返回值:Object * 函数说明:对集合进行排序 var list = [1,5,2,3,6]; return list.sort((a,b)=>a-b); # first * 返回值: Object * 函数说明:返回集合的第一项,集合为空时返回null var list = [1,2,3,4,5] return list.first(); // 1 # last * 返回值: Object * 函数说明:返回集合的最后一项,集合为空时返回null var list = [1,2,3,4,5] return list.last(); // 5 # reserve * 返回值:Object * 函数说明:对集合进行反转操作 var list = [1,5,2,3,6]; return list.reserve(); # join(拼接) * 入参:separator : String 分隔符 * 返回值:String * 函数说明:对集合进行拼接操作 var list = [1,5,2,3,6]; return list.join('-'); // 1-5-2-3-6 # shuffle * 返回值:Object * 函数说明:对集合进行打乱处理 var list = [1,5,2,3,6]; return list.shuffle(); # max * 返回值:Object * 函数说明: 取出集合最大值,如果找不到返回null var list = [1,6,8,9,18,12]; return list.max(); // 18 # min * 返回值:Object * 函数说明: 取出集合最小值,如果找不到返回null var list = [6,1,8,9,18,12]; return list.min(); // 1 # sum * 返回值:Object * 函数说明: 累加求和,计算不出返回0.0 var list = [1,2,3,4]; return list.sum(); // 10 # avg * 返回值:Object * 函数说明: 计算平均值,计算不出返回null var list = [1,2,3,4]; return list.avg(); // 2.5 # group * 入参:condition : Function 分组条件 如:item=>item.xxx 根据xxx字段分组 * 入参:mapping : Function 结果映射(省略时不做映射返回List) 如:list=>list.sum() 分组求和 * 返回值:Map<Object, List<Object>>或Map<Object, Object> * 函数说明: 分组 // List<Map<String,Object>> var result = [ { xxx : 1, yyy : 2, value : 11}, { xxx : 1, yyy : 2, value : 22}, { xxx : 2, yyy : 2, value : 33} ]; return result.group(item=>item.xxx + '_' + item.yyy) /* Map<Object,List<Object>> { "1_2": [ {"yyy": 2, "xxx": 1, "value": 11}, {"yyy": 2, "xxx": 1, "value": 22} ], "2_2": [{"yyy": 2, "xxx": 2, "value": 33 }] } */ return result.group(item=>item.xxx + '_' + item.yyy,list=>{ count : list.size(), sum : list.map(v=>v.value).sum(), avg : list.map(v=>v.value).avg() }) /* Map<Object,Object> { "1_2": { "avg": 16.5, "count": 2, "sum": 33 }, "2_2": { "avg": 33, "count": 1, "sum": 33 } } */ # join(关联) * 入参:target : Object 分组条件 如:item=>item.xxx 根据xxx字段分组 * 入参:condition : Function 关联条件 如:(left,right)=>left.xxx == right.xxx * 入参:mapping : Function 结果映射(省略时会将两个对象合并处理)如:(left,right)=>{xxx : left.xxx, yyy : right.yyy} * 返回值:List<Object> * 函数说明: 将两个集合管理起来 var year2019 = [ { "pt": 2019, "item_code": "code_1", "sum_price": 2234 }, { "pt": 2019, "item_code": "code_2", "sum_price": 234 }, { "pt": 2019, "item_code": "code_3", "sum_price": 12340 }, { "pt": 2019, "item_code": "code_4", "sum_price": 2344 } ]; var year2018 = [ { "pt": 2018, "item_code": "code_1", "sum_price": 1234.0 }, { "pt": 2018, "item_code": "code_4", "sum_price": 1234.0 } ]; return year2019.join(year2018, (left, right) => left.item_code == right.item_code, (left, right) => { '年份' : left.pt, '编号' : left.item_code, '今年' : left.sum_price, '去年' : right == null ? 'unknow' : right.sum_price, '环比去年增长' : right == null ? '-': (((left.sum_price - right.sum_price) / right.sum_price * 100) + "%") }); /* [ {"年份": 2019, "今年": 2234, "去年": 1234, "环比去年增长": "81.03728%", "编号": "code_1"}, {"年份": 2019, "今年": 234, "去年": "unknow", "环比去年增长": "-", "编号": "code_2"}, {"年份": 2019, "今年": 12340,"去年": "unknow","环比去年增长": "-","编号": "code_3"}, {"年份": 2019, "今年": 2344, "去年": 1234, "环比去年增长": "89.95138%", "编号": "code_4"} ] */ # asBean(转为Java对象) * 入参:target : Class<?> 目标类型 * 返回值:List<?> * 函数说明: 将List<Object> 转为目标List import 'org.ssssssss.script.functions.User' as User; var userList = [{ age : 18, weight : 121, money : 123456789L, name : '法外狂徒', roles : [{ name : 'admin', permissions : ['1', '2', '3'] },{ name : 'normal', permissions : ['4', '5', '6'] }] }] return userList.asBean(User.class); # every * 入参:condition : Function 判断条件 如:value => value > 2 * 返回值:boolean * 函数说明:判断集合是否都符合条件 var vals = [1, 2, 3, 4, 5, 6, 7]; return vals.every(e => e > 0); // true # some * 入参:condition : Function 判断条件 如:value => value > 2 * 返回值:boolean * 函数说明:判断集合是否有符合条件的 var vals = [1, 2, 3, 4, 5, 6, 7]; return vals.some(e => e == 0); // false # reduce * 入参:function : Function 计算函数 如:(sum,val)=>sum + val * 返回值:Object * 函数说明:循环集合通过给定的计算函数返回一个新值 var vals = [1, 2, 3]; return vals.reduce((sum, val) => sum + val); // 6 # find * 入参:function:Function 查找函数,如:it => it.name == 'A' * 返回值:Object * 函数说明:循环集合查找符合条件的对象 var list = [{name: 'A'}, {name:'B'}] return list.find(it => it.name == 'A'); // {name: 'A'} # findIndex * 入参:function:Function 查找函数,如:it => it.name == 'A' * 返回值:Object * 函数说明:循环集合查找符合条件的对象位置 var list = [{name: 'A'}, {name: 'B'}] return list.findIndex(it => it.name == 'A'); // 0 # concat * 入参:Object,要连接的集合对象,可写多个 * 返回值:Object * 函数说明:拼接一个或多个集合,返回新的集合 var list = [1]; return [1].concat([2]); // [1,2] list不变 return [1].concat([2],[3, 4]); // [1, 2, 3, 4] list不变 # toMap * 入参:mappingKey:Function,key映射方法,如:it => it.id * 入参:mappingValue:Function,value映射方法,如:it => {name: it.name},可省略,默认为本身 var list = [ {id : 1, name: 'A'}, {id : 2, name: 'B'}, {id : 3, name: 'C'}, ] return list.toMap(k => k.id, v => v.name) // {1: 'A', 2: 'B', 3: 'C'} # skip * 入参:value : int 跳过的数量,如:2 * 返回值:Object * 函数说明:跳过指定个数截取集合 var vals = [1, 2, 3, 4]; return vals.skip(2); // [3, 4] # limit * 入参:value : int 限制的数量,如:2 * 返回值:Object * 函数说明:取指定个数的集合 var vals = [1, 2, 3, 4]; return vals.limit(3); // [1, 2, 3] # findNotNull * 返回值:Object * 函数说明:找到第一个不为null的值 var vals = [null, null, 3, null]; return vals.findNotNull(); // 3 # distinct() 去重 * 返回值:Object * 函数说明:去掉重复元素。 var arr = [1, 2, 2, 3]; return arr.distinct(); // [1, 2, 3] # distnct(func) 根据函数返回值去重 * 入参: 映射函数, 形如e -> e.id。 * 返回值:Object * 函数说明:根据函数返回值重复,去掉重复元素。 var arr = [{id: 1, name: "xiaodong"}, {id:1, name: "magic-api"}]; return arr.distinct(e => e.id); // [{id: 1, name: "xiaodong"}]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Dwsy/magic-api-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server