Java Stream流和构建者模式优化代码示例:构建TalentAbility对象
{"title":"使用Java Stream流、设计模式优化下面代码:\nprivate TalentAbility parseToTalent(final Row row, final LoginUserPojo user) {\n final int rowNum = row.getRowNum() + 1;\n int cellNum = 0;\n\n final TalentAbility talent = new TalentAbility();\n final String domain = getCellValue(row, cellNum++);\n Assert.hasText(domain, getTipsInfo(rowNum, "领域不能为空(无法识别合并单元格)"));\n final String domainStr = StringUtils.replaceAll(domain, StringUtils.LF, StringUtils.EMPTY);\n talent.setDomain(domainStr);\n final String speciality = getCellValue(row, cellNum++);\n Assert.hasText(speciality, getTipsInfo(rowNum, "专业方向不能为空(无法识别合并单元格)"));\n final String specialityStr = StringUtils.replaceAll(speciality, StringUtils.LF, StringUtils.EMPTY);\n talent.setSpeciality(specialityStr);\n final String ability = getCellValue(row, cellNum++);\n Assert.hasText(ability, getTipsInfo(rowNum, "核心能力项不能为空(无法识别合并单元格"));\n final String abilityStr = StringUtils.replaceAll(ability, StringUtils.LF, StringUtils.EMPTY);\n talent.setAbility(abilityStr);\n final String abilityDescription = getCellValue(row, cellNum++);\n Assert.hasText(abilityDescription, getTipsInfo(rowNum, "能力项描述不能为空(无法识别合并单元格)"));\n talent.setAbilityDescription(abilityDescription);\n final String courseName = getCellValue(row, cellNum++);\n Assert.hasText(courseName, getTipsInfo(rowNum, "课程名称不能为空"));\n final String courseNameStr = StringUtils.replaceAll(courseName, StringUtils.LF, StringUtils.EMPTY);\n talent.setCourseName(courseNameStr);\n final String trainees = getCellValue(row, cellNum++);\n Assert.hasText(trainees, getTipsInfo(rowNum, "培训对象不能为空"));\n talent.setTrainees(trainees);\n final String trainingDay = getCellValue(row, cellNum++);\n talent.setTrainingDays(trainingDay);\n final String courseAim = getCellValue(row, cellNum++);\n talent.setCourseAim(courseAim);\n final String teachers = getCellValue(row, cellNum++);\n Assert.hasText(teachers, getTipsInfo(rowNum, "师资不能为空"));\n talent.setTeachers(teachers);\n final String trainingMode = getCellValue(row, cellNum++);\n Assert.hasText(trainingMode, getTipsInfo(rowNum, "培训方式不能为空"));\n talent.setTrainingMode(trainingMode);\n final String learningRequire = getCellValue(row, cellNum++);\n Assert.hasText(learningRequire, getTipsInfo(rowNum, "学习要求不能为空"));\n talent.setLearningRequire(learningRequire);\n final String authLevel = getCellValue(row, cellNum++);\n Assert.hasText(authLevel, getTipsInfo(rowNum, "学习阶段不能为空(无法识别合并单元格)"));\n talent.setAuthLevel(authLevel);\n final String authRule = getCellValue(row, cellNum);\n Assert.hasText(authRule, getTipsInfo(rowNum, "认证规则不能为空(无法识别合并单元格)"));\n talent.setAuthRule(authRule);\n\n checkTalent(talent, rowNum);\n talent.setCreateName(user.getUserName());\n talent.setCreateUid(user.getUserID());\n talent.setCreateTime(new Date());\n\n return talent;\n }\n内容:使用Java Stream流和设计模式来优化上述代码,可以使用构建者模式来简化代码。\n\n首先,创建一个名为TalentAbilityBuilder的内部类,作为TalentAbility的构建者。\n\njava\nprivate static class TalentAbilityBuilder {\n private final TalentAbility talent;\n\n private TalentAbilityBuilder() {\n talent = new TalentAbility();\n }\n\n public TalentAbilityBuilder withDomain(String domain) {\n talent.setDomain(StringUtils.replaceAll(domain, StringUtils.LF, StringUtils.EMPTY));\n return this;\n }\n\n public TalentAbilityBuilder withSpeciality(String speciality) {\n talent.setSpeciality(StringUtils.replaceAll(speciality, StringUtils.LF, StringUtils.EMPTY));\n return this;\n }\n\n public TalentAbilityBuilder withAbility(String ability) {\n talent.setAbility(StringUtils.replaceAll(ability, StringUtils.LF, StringUtils.EMPTY));\n return this;\n }\n\n public TalentAbilityBuilder withAbilityDescription(String abilityDescription) {\n talent.setAbilityDescription(abilityDescription);\n return this;\n }\n\n public TalentAbilityBuilder withCourseName(String courseName) {\n talent.setCourseName(StringUtils.replaceAll(courseName, StringUtils.LF, StringUtils.EMPTY));\n return this;\n }\n\n public TalentAbilityBuilder withTrainees(String trainees) {\n talent.setTrainees(trainees);\n return this;\n }\n\n public TalentAbilityBuilder withTrainingDays(String trainingDays) {\n talent.setTrainingDays(trainingDays);\n return this;\n }\n\n public TalentAbilityBuilder withCourseAim(String courseAim) {\n talent.setCourseAim(courseAim);\n return this;\n }\n\n public TalentAbilityBuilder withTeachers(String teachers) {\n talent.setTeachers(teachers);\n return this;\n }\n\n public TalentAbilityBuilder withTrainingMode(String trainingMode) {\n talent.setTrainingMode(trainingMode);\n return this;\n }\n\n public TalentAbilityBuilder withLearningRequire(String learningRequire) {\n talent.setLearningRequire(learningRequire);\n return this;\n }\n\n public TalentAbilityBuilder withAuthLevel(String authLevel) {\n talent.setAuthLevel(authLevel);\n return this;\n }\n\n public TalentAbilityBuilder withAuthRule(String authRule) {\n talent.setAuthRule(authRule);\n return this;\n }\n\n public TalentAbilityBuilder withCreateName(String createName) {\n talent.setCreateName(createName);\n return this;\n }\n\n public TalentAbilityBuilder withCreateUid(String createUid) {\n talent.setCreateUid(createUid);\n return this;\n }\n\n public TalentAbilityBuilder withCreateTime(Date createTime) {\n talent.setCreateTime(createTime);\n return this;\n }\n\n public TalentAbility build() {\n return talent;\n }\n}\n\n\n然后,在parseToTalent方法中使用Stream流和构建者模式来构建TalentAbility对象。\n\njava\nprivate TalentAbility parseToTalent(final Row row, final LoginUserPojo user) {\n final int rowNum = row.getRowNum() + 1;\n int cellNum = 0;\n\n final TalentAbilityBuilder builder = new TalentAbilityBuilder();\n\n final String domain = getCellValue(row, cellNum++);\n Assert.hasText(domain, getTipsInfo(rowNum, "领域不能为空(无法识别合并单元格)"));\n builder.withDomain(domain);\n\n final String speciality = getCellValue(row, cellNum++);\n Assert.hasText(speciality, getTipsInfo(rowNum, "专业方向不能为空(无法识别合并单元格)"));\n builder.withSpeciality(speciality);\n\n final String ability = getCellValue(row, cellNum++);\n Assert.hasText(ability, getTipsInfo(rowNum, "核心能力项不能为空(无法识别合并单元格"));\n builder.withAbility(ability);\n\n final String abilityDescription = getCellValue(row, cellNum++);\n Assert.hasText(abilityDescription, getTipsInfo(rowNum, "能力项描述不能为空(无法识别合并单元格)"));\n builder.withAbilityDescription(abilityDescription);\n\n final String courseName = getCellValue(row, cellNum++);\n Assert.hasText(courseName, getTipsInfo(rowNum, "课程名称不能为空"));\n builder.withCourseName(courseName);\n\n final String trainees = getCellValue(row, cellNum++);\n Assert.hasText(trainees, getTipsInfo(rowNum, "培训对象不能为空"));\n builder.withTrainees(trainees);\n\n final String trainingDay = getCellValue(row, cellNum++);\n builder.withTrainingDays(trainingDay);\n\n final String courseAim = getCellValue(row, cellNum++);\n builder.withCourseAim(courseAim);\n\n final String teachers = getCellValue(row, cellNum++);\n Assert.hasText(teachers, getTipsInfo(rowNum, "师资不能为空"));\n builder.withTeachers(teachers);\n\n final String trainingMode = getCellValue(row, cellNum++);\n Assert.hasText(trainingMode, getTipsInfo(rowNum, "培训方式不能为空"));\n builder.withTrainingMode(trainingMode);\n\n final String learningRequire = getCellValue(row, cellNum++);\n Assert.hasText(learningRequire, getTipsInfo(rowNum, "学习要求不能为空"));\n builder.withLearningRequire(learningRequire);\n\n final String authLevel = getCellValue(row, cellNum++);\n Assert.hasText(authLevel, getTipsInfo(rowNum, "学习阶段不能为空(无法识别合并单元格)"));\n builder.withAuthLevel(authLevel);\n\n final String authRule = getCellValue(row, cellNum);\n Assert.hasText(authRule, getTipsInfo(rowNum, "认证规则不能为空(无法识别合并单元格)"));\n builder.withAuthRule(authRule);\n\n TalentAbility talent = builder.withCreateName(user.getUserName())\n .withCreateUid(user.getUserID())\n .withCreateTime(new Date())\n .build();\n\n checkTalent(talent, rowNum);\n\n return talent;\n}\n
原文地址: http://www.cveoy.top/t/topic/pVVR 著作权归作者所有。请勿转载和采集!