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()); } }
4 Réponses :
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());
}
}
Si vous réorganisez simplement votre code, vous n'obtiendrez pas autant d'instructions E.g. inverser les conditions. Au lieu de: p> si code>.
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());
}
}
Qu'en est-il de diviser chaque La méthode principale a l'air très simple. P> si code> dans une méthode distincte avec une portée faible.
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);
}
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()); } }
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