利用反射、Lambda、Stream流、Map结合Funcation简化代码

利用反射、Lambda、Stream流、Map结合Funcation简化代码

Scroll Down

前言

简洁的代码,看着会让人舒服不少,相信不少同学也体验过看别人代码的痛苦,我们更要注重自身的代码优化,下面几种技术在写代码中使用可以有很多灵活的运用。

Lambda表达式

不用写匿名内部类可以快速调用匿名方法,比如多线程的启动

    Thread t1 = new Thread(()-> System.out.println("线程启动"));
    t1.start();	

接收参数,直接运行方法结果,也能有返回值

(a, b) -> a - b;
(int a, int b) -> { return a * b; };

也能快速循环遍历,str就是list集合存的数据

list.forEach((str) -> System.out.println(str));

anyMatch循环方法,当返回true时跳出循环

Stream流

Stream代表来自源对象的序列,对元素集合进行操作,可以对数据进行筛选、排序、匹配、收集等操作,直接看代码

List<String> strList = Arrays.asList("hello", "2020 end", "lis", "2021 Happy", "color");
        List<String> list = strList.stream()
                .filter(s -> s.startsWith("2"))
                .map(String::toUpperCase)
                .sorted()
                .collect(Collectors.toList());

下图看实际效果:
对集合进行了过滤、转大写、排序操作
QQ图片20201231234807.png

反射函数名称执行函数

因为公司代码有机器审核,单个方法代码行数,if、else if、switch case、for个数都有限制,所以根据以往经验,想出传函数名称执行函数
应用场景1:以前公司是做游戏,游戏活动条件验证、奖励列表等都是函数列表,比如{{"level",1}}需要验证等级方法大于1;{{"level",VIP0},{"vip",3}}等级方法验证大于10,vip验证大于3级,奖励方法同理{货币,物品,任务,特殊}
应用场景2:根据数据不用状态执行不同函数

应用

自己调试完成后还有些瑕疵,后面发现有现成工具类MethodUtils,就直接封装它的方法了

/**
     * @param object     实例化对象
     * @param methodName 需要执行的函数名
     * @param args       参数列表
     * @throws Exception
     */
    public static void invoke(Object object, String methodName, Object... args) throws Exception {
        MethodUtils.invokeMethod(object, methodName, args);
    }

效果图:
QQ图片20210101000607.png

Map结合Funcation

map存操作值和函数方法
5ff30236ac534500014ee33a.png
当触发事件时,调用一次函数
downloadfile.png
但个人觉得不如反射简洁