zoukankan      html  css  js  c++  java
  • Java 将方法作为参数传递

    1、前言

    在通过WebSocket向浏览器发送数据时,需要发送3种数据到页面上,写3个方法感觉太冗余,故想到了JDK1.8的lambda表达式和Function<T, R>实现Java把方法作为参数传递

    2、上代码

    package com.ruoyi.project.front.comService;
    
    import com.ruoyi.project.manage.param_set.mapper.ParamSetMapper;
    import com.ruoyi.project.socket.webSocket.BeamWebSocket;
    import com.ruoyi.project.socket.webSocket.LighterWebSocket;
    import com.ruoyi.project.socket.webSocket.RollerWebSocket;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Timer;
    import java.util.TimerTask;
    import java.util.function.Function;
    
    @Component
    public class SendToWebHelper {
        @Autowired
        private ParamSetMapper paramSetMapper;
        private static int index = 0;
        private static Integer hz = 5;
    
        public void sendToWeb() {
            sendToWeb("lighter", (s) -> LighterWebSocket.sendMessageToAllClient(s));
            sendToWeb("roller", (s) -> RollerWebSocket.sendMessageToAllClient(s));
            sendToWeb("beam", (s) -> BeamWebSocket.sendMessageToAllClient(s));
        }
    
        private void sendToWeb(String dir, Function<String, String> function) {
            String imgFileDir = paramSetMapper.getParamByCode("imgFileDir").getParamValue();
            String nginxServer = paramSetMapper.getParamByCode("nginxServer").getParamValue();
            File file = new File(imgFileDir + "/" + dir);
            if (!file.exists() || file.listFiles() == null || file.listFiles().length <= 0) {
                System.out.println(dir + " dir empty");
                return;
            }
            List<String> list = new ArrayList<>();
            for (File f1 : file.listFiles()) {
                list.add(f1.getName());
            }
    
            Timer timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    try {
                        String webPath = nginxServer + "/" + dir + "/" + list.get(index) + "";
                        if (index++ >= list.size() - 1) {
                            index = 0;
                        }
                        function.apply(webPath);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }, 0, 1000 / hz);
        }
    }
    
    
  • 相关阅读:
    Spring JPA使用CriteriaBuilder动态构造查询
    vscode 将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹
    CDN 加速配置
    dos常用命令
    使用Github作为博客的图床
    一个简单mock-server 解决方案
    postman(三):详解postman动态变量使用
    postman(一):详解在postman中使用环境变量
    postman(二):详解在Pre-request Script中如何执行请求
    MySql中4种批量更新的方法
  • 原文地址:https://www.cnblogs.com/kikyoqiang/p/14623017.html
Copyright © 2011-2022 走看看