使用lambda-java8进行代码重构
我只是在研究函数式编程的基础知识。我想用Java中的lambda转换下面的代码。我正在使用Java8。任何帮助都将不胜感激 谢谢使用lambda-java8进行代码重构,java,lambda,java-8,Java,Lambda,Java 8,我只是在研究函数式编程的基础知识。我想用Java中的lambda转换下面的代码。我正在使用Java8。任何帮助都将不胜感激 谢谢 String reinBranches = (String) application.getAttribute("xx_xx_xx"); if(reinBranches != null && reinBranches.length() > 0) { String reinBranchArray[]
String reinBranches = (String) application.getAttribute("xx_xx_xx");
if(reinBranches != null && reinBranches.length() > 0)
{
String reinBranchArray[] = reinBranches.split(",");
for(int i = 0; i < reinBranchArray.length; i++)
{
if(reinBranchArray[i].equals((String) session.getAttribute("xyz_xyz_xyz"))) {
return true;
}
}
}
return false;
魔力
魔力
首先,我将获得您想要匹配的属性,并在lambda之前保存它。然后从拆分中流式处理字符串[],如果有符合条件的字符串,则返回true。最后,使用逻辑and防止返回时出现NPE。像 或者如使用Pattern.splitAsStream的注释中所建议的那样,如果找到匹配项,则可能会短路,而无需通过拆分构建阵列
return reinBranches != null && Pattern.compile(",").splitAsStream(reinBranches).anyMatch(xyz3::equals);
首先,我将获得您想要匹配的属性,并在lambda之前保存它。然后从拆分中流式处理字符串[],如果有符合条件的字符串,则返回true。最后,使用逻辑and防止返回时出现NPE。像 或者如使用Pattern.splitAsStream的注释中所建议的那样,如果找到匹配项,则可能会短路,而无需通过拆分构建阵列
return reinBranches != null && Pattern.compile(",").splitAsStream(reinBranches).anyMatch(xyz3::equals);
这只是另一种不需要任何使用流开销的方法:-
String reinBranches = (String) application.getAttribute("xx_xx_xx");
String xyz3 = (String) session.getAttribute("xyz_xyz_xyz");
return reinBranches != null && Pattern.compile(xyz3).matcher(reinBranches).find(0);
这只是另一种不需要任何使用流开销的方法:-
String reinBranches = (String) application.getAttribute("xx_xx_xx");
String xyz3 = (String) session.getAttribute("xyz_xyz_xyz");
return reinBranches != null && Pattern.compile(xyz3).matcher(reinBranches).find(0);
使用lambda的第一条规则是:您的目标接口是函数接口吗?您的意思是要将实现转换为具有流的实现吗?@AniketSahrawat:关键是我只是函数编程的新手。我正处于尝试转换代码的阶段。我只是想知道我是否能把这个小东西转换成lamda。@daniu是的,没错!为什么要投反对票??使用lambda的第一条规则是:你的目标接口是函数接口吗?你的意思是你想把实现转换成一个带有流的实现吗?@AniketSahrawat:关键是我只是函数编程的新手。我正处于尝试转换代码的阶段。我只是想知道我是否能把这个小东西转换成lamda。@daniu是的,没错!为什么投反对票??Pattern.compile、.splitAsStreamreinBranches.anyMatchs->s.equalsession.getAttributexyz\u xyz\u xyz;在复合表达式中永远不需要布尔文字。在此特定情况下,简化表达式为ReinBranchs!=null&&Arrays.streamReinBranchs.split、.anyMatchattr::equals。另一个值得考虑的选择是取消拆分操作:ReinBranchs!=null&&reinbranchs.matches.*,+Pattern.quotexyz3+,*@霍尔格非常好。我显然需要更多的咖啡。继续!Pattern.splitAsStream的优点是不预先生成所有子字符串的数组。由于anyMatch是短路,因此与String.split+Arrays.stream相比,这可以真正减少工作量。另一方面,String.split为单字符分隔符提供了一个优化的代码路径,它可能会在中小型字符串中获胜…Pattern.compile、.splitAsStreamreinBranches.anyMatchs->s.equalsession.getAttributexyz_xyz_xyz;在复合表达式中永远不需要布尔文字。在此特定情况下,简化表达式为ReinBranchs!=null&&Arrays.streamReinBranchs.split、.anyMatchattr::equals。另一个值得考虑的选择是取消拆分操作:ReinBranchs!=null&&reinbranchs.matches.*,+Pattern.quotexyz3+,*@霍尔格非常好。我显然需要更多的咖啡。继续!Pattern.splitAsStream的优点是不预先生成所有子字符串的数组。由于anyMatch是短路,因此与String.split+Arrays.stream相比,这可以真正减少工作量。另一方面,String.split为单字符分隔符提供了一个优化的代码路径,它很可能在中小型字符串中获胜…@Holger另外,它是社区wiki,因此您可以编辑它it@Holger而且,它是社区维基,所以你可以编辑它