-1
votes

Convertir Multi If-else à un code d'expression simple Lambda à Java

Je suis nouveau avec Lambda et je souhaite convertir mon code simple qui a à plusieurs personnes dans le code de Lambda. Quelqu'un peut-il m'expliquer comment faire? Je ne comprends pas vraiment comment construire

public void registerModule(HttpServletRequest req, ModuleType moduleType) {
    LOGGER.debug("Register New Module - " + moduleType.name());
    ModuleEntityGenerator moduleEntityGenerator = new ModuleEntityGenerator();
    try {
        if (!req.getParts().isEmpty() && !req.getParameterMap().isEmpty()) {
            ModuleEntityDao moduleEntityDao = moduleEntityGenerator.get(req, moduleType);
            if (moduleEntityDao != null) {
                if (processRegistryDal.getModule(moduleType, moduleEntityDao.getId()) == null) { // Check BA is not already exist
                    processRegistryDal.addNewModule(moduleEntityDao);
                } else { // If already exists just update the current row
                    processRegistryDal.updateModule(moduleEntityDao);
                }
            } else {
                LOGGER.error("The BA object is null. There is nothing to register");
            }
        } else {
            LOGGER.error("The rest request is empty.No info to register");
        }
    } catch (IOException e) {
        LOGGER.error("IO Error\n" + e.getMessage());
    } catch (ServletException e) {
        LOGGER.error("Servlet Error\n" + e.getMessage());
    }
}


3 commentaires

J'extraînerais d'abord les méthodes avant d'essayer Lambdas.


Pourquoi croyez-vous qu'utiliser Lambda améliorerait le code? Ce ne sera pas.


Je ne serai pas plus facile avec Lambda, ne pensez pas que


4 Réponses :


2
votes

Rien à voir avec Lambda ici, juste une pointe de nettoyage rapide. Début Retour CODE> S est un excellent moyen d'aplatir le code, de rendre sa complexité apparente plus près de sa complexité réelle. Il suffit d'inverser le sens de votre si code> conditions, tirez le journal d'erreur et revenez. Regardez la meilleure cette transformation de cette transformation.

public void registerModule(HttpServletRequest req, ModuleType moduleType) {
    LOGGER.debug("Register New Module - " + moduleType.name());
    try {
        if (req.getParts().isEmpty() || req.getParameterMap().isEmpty()) {
            LOGGER.error("The rest request is empty.No info to register");
            return;
        }

        ModuleEntityGenerator moduleEntityGenerator = new ModuleEntityGenerator();
        ModuleEntityDao moduleEntityDao = moduleEntityGenerator.get(req, moduleType);
        if (moduleEntityDao == null) {
          LOGGER.error("The BA object is null. There is nothing to register");
          return;
        }

        if (processRegistryDal.getModule(moduleType, moduleEntityDao.getId()) == null) { // Check BA is not already exist
            processRegistryDal.addNewModule(moduleEntityDao);
        } else { // If already exists just update the current row
            processRegistryDal.updateModule(moduleEntityDao);
        }
    } catch (IOException e) {
        LOGGER.error("IO Error\n" + e.getMessage());
    } catch (ServletException e) {
        LOGGER.error("Servlet Error\n" + e.getMessage());
    }
}


0 commentaires

1
votes

Si vous réorganisez simplement votre code, vous n'obtiendrez pas autant d'instructions si code>.

E.g. inverser les conditions. Au lieu de: p>

public void registerModule(HttpServletRequest req, ModuleType moduleType) {
    LOGGER.debug("Register New Module - " + moduleType.name());
    try {
        ModuleEntityDao moduleEntityDao;
        if (req.getParts().isEmpty() || req.getParameterMap().isEmpty()) {
            LOGGER.error("The rest request is empty.No info to register");
        } else if ((moduleEntityDao = new ModuleEntityGenerator().get(req, moduleType)) == null) {
            LOGGER.error("The BA object is null. There is nothing to register");
        } else if (processRegistryDal.getModule(moduleType, moduleEntityDao.getId()) == null) { // Check BA is not already exist
            processRegistryDal.addNewModule(moduleEntityDao);
        } else { // If already exists just update the current row
            processRegistryDal.updateModule(moduleEntityDao);
        }
    } catch (IOException e) {
        LOGGER.error("IO Error\n" + e.getMessage());
    } catch (ServletException e) {
        LOGGER.error("Servlet Error\n" + e.getMessage());
    }
}


0 commentaires

0
votes

Qu'en est-il de diviser chaque si code> dans une méthode distincte avec une portée faible.

La méthode principale a l'air très simple. P>

private static boolean isRequestEmpty(HttpServletRequest req) {
    if (req.getParts().isEmpty() || req.getParameterMap().isEmpty()) {
        LOGGER.error("The rest request is empty.No info to register");
        return true;
    }

    return false;
}

private static ModuleEntityDao createModule(HttpServletRequest req, ModuleType moduleType) {
    ModuleEntityDao module = new ModuleEntityGenerator().get(req, moduleType);

    if (module != null)
        return module;

    LOGGER.error("The BA object is null. There is nothing to register");
    return module;
}

private void addOrUpdateModule(ModuleEntityDao module) {
    if(module == null)
        return;

    if(processRegistryDal.getModule(module.getModuleType(), module.getId()) == null)
        processRegistryDal.addNewModule(moduleEntityDao);
    else
        processRegistryDal.updateModule(moduleEntityDao);
}


0 commentaires

0
votes

Ce n'est pas Lamda, mais facilite la lecture du programme avec le principe de quitter immédiatement la fonction si l'entrée n'est pas valide en appelant "retour".

public void registerModule(HttpServletRequest req, ModuleType moduleType) {
    try {
        LOGGER.debug("Register New Module - " + moduleType.name());
        ModuleEntityGenerator moduleEntityGenerator = new ModuleEntityGenerator();

        if (req.getParts().isEmpty() || req.getParameterMap().isEmpty()) {
            LOGGER.error("The rest request is empty.No info to register");
            return;
        }

        ModuleEntityDao moduleEntityDao = moduleEntityGenerator.get(req, moduleType);
        if (moduleEntityDao == null) {
            LOGGER.error("The BA object is null. There is nothing to register");
            return;
        }     

        if (processRegistryDal.getModule(moduleType, moduleEntityDao.getId()) == null) { 
            // Check BA is not already exist
            processRegistryDal.addNewModule(moduleEntityDao);
            return;
        }

        // If already exists just update the current row
        processRegistryDal.updateModule(moduleEntityDao);

    } catch (Exception ex) {
        LOGGER.error("Error\n" + ex.getMessage());
    }
}


0 commentaires