magic-api magic-api
首页
  • 快速入门
  • 基础教程
  • 权限配置
  • 高级应用
  • 开发插件
  • 模块
  • 函数
  • 扩展
  • Gitee (opens new window)
  • Github (opens new window)
  • 演示 (opens new window)
  • SpringBoot配置
  • 编辑器配置
  • 2.x更新日志
  • 1.x更新日志
  • 0.x更新日志
常见问题
💖支持
交流群
首页
  • 快速入门
  • 基础教程
  • 权限配置
  • 高级应用
  • 开发插件
  • 模块
  • 函数
  • 扩展
  • Gitee (opens new window)
  • Github (opens new window)
  • 演示 (opens new window)
  • SpringBoot配置
  • 编辑器配置
  • 2.x更新日志
  • 1.x更新日志
  • 0.x更新日志
常见问题
💖支持
交流群
  • 模块

    • db模块
    • http模块
    • log模块
    • request模块
    • response模块
    • env模块
    • magic模块
  • 函数

    • 聚合函数
    • 日期函数
    • 字符串函数
    • 数组函数
    • 数学函数
    • 其它函数
  • 扩展

    • Object
    • Number
    • 数组&集合
      • Date
      • Class
      • Pattern
    • API
    • 扩展
    mxd
    2022-01-30
    目录

    数组&集合

    # 为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"}]
    
    上次更新: 2023-03-23 13:11:51
    Number
    Date

    ← Number Date→

    Theme by Vdoing | Copyright © 2020-2023 ssssssss.org | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×