复杂for循环与复杂if判断的优化方式-表驱动

    此判断用例,用大家熟悉的学生语文成绩与学生的电话号码做为素材,通过原生的判断代码编写方式与
优化的判断代码编写方式比较,让大家熟练掌握代码中复杂的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);
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值