此判断用例,用大家熟悉的学生语文成绩与学生的电话号码做为素材,通过原生的判断代码编写方式与 优化的判断代码编写方式比较,让大家熟练掌握代码中复杂的for循环与if判断的优化方式,从而写出 简洁与高效的高质量代码。
package com.shungaole.demo.judge; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "分支对象") public class JudgeObject { @ApiModelProperty(value = "关键字") private String key; @ApiModelProperty(value = "对象值") private String value; }
package com.shungaole.demo.judge; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 本判断用例,用大家熟悉的学生语文成绩与学生的电话号码做为素材,通过原生的判断代码编写方式与 * 优化的判断代码编写方式比较,让大家熟练掌握代码中复杂的for循环与if判断的优化方式,从而写出 * 简洁与高效的高质量代码。 */ public class JudgeDemo { //优秀成绩设置 public static final Integer SCORE=97; /** * 初始化语文成绩 * @return 学生语文成绩 */ private static List<JudgeObject> getChineseScoresList(){ List<JudgeObject> chineseScoresList=new ArrayList<>(); JudgeObject judgeObject=new JudgeObject(); judgeObject.setKey("张三"); judgeObject.setValue("91"); chineseScoresList.add(judgeObject); judgeObject=new JudgeObject(); judgeObject.setKey("李四"); judgeObject.setValue("97"); chineseScoresList.add(judgeObject); judgeObject=new JudgeObject(); judgeObject.setKey("王二"); judgeObject.setValue("98"); chineseScoresList.add(judgeObject); return chineseScoresList; } /** * 初始化电话号码 * @return 学生电话号码 */ private static List<JudgeObject> getTelList(){ List<JudgeObject> telList=new ArrayList<>(); JudgeObject judgeObject=new JudgeObject(); judgeObject.setKey("张三"); judgeObject.setValue("13512345678"); telList.add(judgeObject); judgeObject=new JudgeObject(); judgeObject.setKey("李四"); judgeObject.setValue("13612345678"); telList.add(judgeObject); judgeObject=new JudgeObject(); judgeObject.setKey("王二"); judgeObject.setValue("13712345678"); telList.add(judgeObject); return telList; } /** * 把语文成绩大于等于97分的学生电话号码找出来,原生写法 * @return 优秀学生的语文成绩与电话 */ public static List<String> nativeJudgment(){ List<String> outstandingStudentsList=new ArrayList<>(); List<JudgeObject> chineseScoresList=getChineseScoresList(); List<JudgeObject> telList=getTelList(); for(JudgeObject judgeObject:chineseScoresList){//1重循环 String scoreStr=judgeObject.getValue(); Integer score=new Integer(scoreStr); if(score>=SCORE){//1重判断 String name=judgeObject.getKey(); for(JudgeObject tel:telList){//2重循环 String nameKey=tel.getKey(); String telValue=tel.getValue(); if(StringUtils.equals(name,nameKey)){//2重判断 String str="姓名:"+name+" 电话:"+telValue+" 语文成绩:"+score; outstandingStudentsList.add(str); } } } } return outstandingStudentsList; } /** * 把语文成绩大于等于97分的学生电话号码找出来,优化写法, * 把2个if 2个for缩减为1个for,代码也从20行缩减为15行。 * @return 优秀学生的语文成绩与电话 */ public static List<String> optimizationJudgment(){ List<String> outstandingStudentsList=new ArrayList<>(); List<JudgeObject> chineseScoresList=getChineseScoresList(); chineseScoresList=chineseScoresList.stream().filter(entry -> Integer.parseInt(entry.getValue()) >= SCORE).collect(Collectors.toList()); List<JudgeObject> telList=getTelList(); Map<String,JudgeObject> studentMap =telList.stream().collect(Collectors.toMap(JudgeObject::getKey, each->each,(valueOne, valueTwo) -> valueOne)); chineseScoresList.stream().parallel().forEach(judgeObject->{//1次循环完成 String name=judgeObject.getKey(); String score=judgeObject.getValue(); JudgeObject student=studentMap.get(name); String telValue=student.getValue(); String str="姓名:"+name+" 电话:"+telValue+" 语文成绩:"+score; outstandingStudentsList.add(str); }); return outstandingStudentsList; } public static void main(String[] args) { List<String> stringList= nativeJudgment(); for (String s: stringList) { System.out.println("原生判断==>"+s); } stringList= optimizationJudgment(); for (String s: stringList) { System.out.println("优化判断==>"+s); } } }