java代码实例分析
java代码实例分析
这篇文章主要介绍“java代码实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java代码实例分析”文章能帮助大家解决问题。
一、几个坑爹代码的目录
1、这样使用 StringBuffer 的方法有什么坑?
2、你写过的最长的一行代码有多长???
3、循环+条件判断,你最多能嵌套几层?
4、为了后期优化查询速度 ~ 颇有商业头脑!
5、你是如何被异常玩然后变成玩异常的?
6、Stream 玩得最 6 的代码,看过的人都惊呆了!
二、坑爹代码 | 这样使用 StringBuffer 的方法有什么坑?
你是否曾经这样使用过 Java 的 StringBuffer 类?
/***CreateTime2019/5/24*StringBuffer追加如痴如醉的写法*@authorcailong**/publicclassAppend{publicstaticvoidmain(String[]ares){StringBuffersb=newStringBuffer();//这里都能理解sb.append("<?xmlversion=\"1.0\"encoding=\"UTF-8\"?><ROOT>");for(inti=0;i<10;i++){//为什么到这里就要这样写???既然都用StringBuffer了(这里省略集合遍历用i代替意思能懂就行)sb.append("<NSRXX>"+"<NSRSBH>"+i+"</NSRSBH>"+"<NSRMC>"+i+"</NSRMC>"+"<DJXH>"+i+"</DJXH>"+"<ZGSWJ_DM>"+i+"</ZGSWJ_DM>"+"<ZGSWJ_MC>"+i+"</ZGSWJ_MC>"+"<SJLY>sjzs</SJLY>"+"<YWSX_DM>"+i+"</YWSX_DM>"+"</NSRXX>");}sb.append("</ROOT>");System.out.println(sb.toString());}}
三、坑爹代码 | 你写过的最长的一行代码有多长???
你写过的最长的一行代码有多长吗?你为什么要写这么长?是看着帅呢,还是想减少代码行数?
List<OperationPurchaseInfo>purchaseInfoList=sheet.getPurchaseInfoList().stream().filter(purchaseInfo->purchaseInfo.getExteriorOperation().getExteriorPart().getExteriorOperationList().stream().filter(exteriorOperation->exteriorOperation.getProcessState().equals(ExteriorOperation.ProcessState.PROCESSING)).count()!=0//订单明细中工序对应的工件下的其他工序存在加工中,//且已发给供应商且供应商不是当前订单供应商时,需要判断&&(purchaseInfo.getExteriorOperation().getExteriorPart().getTeamwork()==null||!purchaseInfo.getExteriorOperation().getExteriorPart().getTeamwork().equals(sheet.getTeamwork()))).collect(Collectors.toList());
上面这段代码虽然被拆开多行显示,但本质上是一行,一个极其复杂的赋值语句!
这种代码是不是为了让别人看不懂来彰显自己的编码水平呢?
小编觉得 Java Stream API 以及各种函数式编程方法,以及各种语法糖在某种程度让这种糟糕代码越来越多!
那么一起来批判一下这个代码,或者你有什么好的解决方案呢?
四、坑爹代码 | 循环+条件判断,你最多能嵌套几层?
for 循环和 if 条件判断语句,必不可少吧。但是你见过最多嵌套的循环和条件判断有几层呢?或者说,你最多能容忍多少层的嵌套呢?
我们还是先来看看极端的坑爹代码吧:
//这个***循环嵌套,只是总循环的一部分。。。我已经绕晕在黄桷湾立交if(recordList.size()>start){for(inti=start;i<end;i++){Map<String,Object>map=recordList.get(i);Map<String,Object>field11=(Map<String,Object>)map.get("field");//name->codeMap<String,Object>record11=(Map<String,Object>)map.get("record");//code->valueStringcatagory1=map.get("categoryId").toString();//查询***种类型对应的其他类型SalaryDataVoss=JSON.parseObject(JSON.toJSONString(map),SalaryDataVo.class);Pagepage3=salaryManagerService.getAllRecordsByCondition(ss);if(page3.getRecords().size()>0){List<Map<String,Object>>salaryDataVos=page3.getRecords();salaryDataVos=this.reSetMap(salaryDataVos,null,null);for(Map<String,Object>map2:salaryDataVos){Map<String,Object>field2=(Map<String,Object>)map2.get("field");Map<String,Object>record2=(Map<String,Object>)map2.get("record");Stringcatagory2=map2.get("categoryId").toString();List<SalaryGroupVO>groupList2=salaryGroupService.getSalaryGroupsItems(this.getUserCorpId(),catagory2);for(SalaryGroupVOcc:groupList2){cc.setCode(cc.getParentId()+cc.getCode());}//计算for(Map.Entry<String,Object>entity:field2.entrySet()){StringkeyName=entity.getKey();for(SalaryGroupVOs2:groupList2){if("bigDecimal".equals(s2.getItemType())&&s2.getCode().equals(field2.get(keyName).toString())&&("部门"!=keyName)&&("姓名"!=keyName)&&StringUtils.isNotEmpty(s2.getItemType())){if(field11.containsKey(keyName)){if(field11.containsKey(keyName)){Stringcode1=field11.get(keyName).toString();DoublenewValue=0.0;DoubleoldValue=0.0;if(!record11.get(code1).toString().matches("^[0-9]*$")){oldValue=Double.parseDouble(record11.get(code1).toString());if(record2.containsKey(entity.getValue().toString())&&(!record2.get(entity.getValue().toString()).toString().matches("^[0-9]*$"))){Stringvalue2=record2.get(entity.getValue().toString()).toString();newValue=Double.parseDouble(value2);}record11.remove(field11.get(keyName).toString());}if(code1.startsWith(catagory1)||code1.startsWith(catagory2)){Stringco=code1.replace(catagory1,"hz");field11.put(keyName,co);record11.put(co,oldValue+newValue);}}}else{Stringcode=entity.getValue().toString();Stringstr=entity.getValue().toString();Objectvalue2=record2.get(entity.getValue().toString());if(str.startsWith(catagory1)&&str.replace(catagory1,"").startsWith("hz")){code=str.replace(catagory1,"");}elseif(str.startsWith(catagory2)&&str.replace(catagory2,"").startsWith("hz")){code=str.replace(catagory2,"");}field11.put(keyName,code);record11.put(code,value2);}}}}}}List<SalaryGroupVO>sList=salaryGroupService.getSalaryGroupItemsByParentId(catagory1);for(SalaryGroupVOs:sList){if(field11.containsKey(s.getName())&&s.getCode().startsWith("hz")){Stringk=field11.get(s.getName()).toString();field11.put(s.getName(),s.getCode());Stringvalue=null;if(record11.containsKey(k)){value=record11.get(k).toString();}record11.put(s.getCode(),value);}}resultList.add(map);pageInfo.setRecords(resultList);}}
五、坑爹代码 | 为了后期优化查询速度 ~ 颇有商业头脑!
什么样的程序员是一个好程序员呢?当我们在给客户开发系统时候,为了后期的优化,预留一些埋点。
通过对这些埋点的优化,可以让客户瞬间感觉系统在运行速度上有质的飞跃,让公司顺利的签署二期开发合同,收取巨额开发费用。
从公司角度来看,这样的程序员就是一个好程序员。
比如:
六、坑爹代码 | 你是如何被异常玩然后变成玩异常的?
玩 Java 的人,刚开始会被各种异常虐,空指针应该是最常见的。多玩两年就开始玩异常,各种奇葩异常玩法层出不穷。
你觉得下面这种异常的定义妥吗?
/***处理业务的异常*居然有一堆静态异常,准备好了随时可以抛??*错误码是字符串*/publicclassCommandExceptionextendsBaseException{privatestaticfinallongserialVersionUID=-6354513454371927970L;publicstaticCommandExceptionPARAM_NULL=newCommandException("Command_assemble_01","ParameterisNeededButEmpty");publicstaticCommandExceptionDEVID_NULL=newCommandException("Command_assemble_02","DevIdCannotBeNull");publicstaticCommandExceptionMDCODE_NULL=newCommandException("Command_assemble_03","ModelCodeCannotBeEmpty");publicstaticCommandExceptionORDER_NULL=newCommandException("Command_assemble_04","OrderCannotBeEmpty");publicstaticCommandExceptionTYPE_NULL=newCommandException("Command_assemble_05","Upstream/DownstreamTypeCannotBeEmpty");publicstaticCommandExceptionMENUID_NULL=newCommandException("Command_assemble_06","MenuIdCannotBeNull");publicstaticCommandExceptionCTRLTYPE_NOT_RANGE=newCommandException("Command_assemble_07","CtrltypeCannotBeRecognized,WhichisnotinRange");publicstaticCommandExceptionCMD_NULL=newCommandException("Command_analyze_01","CMDCannotBeNull");publicstaticCommandExceptionPAYLOAD_NULL=newCommandException("Command_analyze_02","PayloadCannotBeNull");publicstaticCommandExceptionFRAMEWORK_FAILED=newCommandException("Command_analyze_03","FrameworkFailedtobeChecked");publicstaticCommandExceptionCHECK_FAILED=newCommandException("Command_analyze_04","CommandFailedtobeChecked");publicstaticCommandExceptionCONFIGURE_NOT_EXIST=newCommandException("Command_error_1001","ConfigureisnotExist");publicstaticCommandExceptionREDIS_ERROR=newCommandException("Command_error_1002","CacheCommandinRedisError",true);//省略构造函数、get/set方法}
如果不妥,有什么问题呢?
七、坑爹代码 | Stream 玩得最 6 的代码,看过的人都惊呆了!
Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。
Stream 的用法:
//Stream用的66的finalEventActioneventAction=redisObj(EventActionKey+distributionEventId,()->Optional.of(distributionEventId).map(eventId->{finalEventActionExampleexample=newEventActionExample();example.createCriteria().andEventIdEqualTo(eventId).andTriggerTypeEqualTo(EnumEventTriggerType.DISTRIBUTION_PURCHASE.getCode().byteValue());returnexample;}).map(eventActionMapper::selectByExample).filter(StringUtil::isNotEmpty).map(e->e.get(0)).orElseThrow(()->ExceptionUtil.createParamException("事件触发信息不存在")),EventAction.class);finalAwardConfigawardConfig=redisObj(EventConfigKey+eventAction.getId(),()->Optional.ofNullable(eventAction.getId()).map(actionId->{finalAwardConfigExampleexample=newAwardConfigExample();example.createCriteria().andActionIdEqualTo(actionId);returnexample;}).map(awardConfigMapper::selectByExample).filter(StringUtil::isNotEmpty).map(e->e.get(0)).orElseThrow(()->ExceptionUtil.createParamException("xxx")),AwardConfig.class);Optional.of(req).map(e->e.clueUid).map(id->{finalClueExampleexample=newClueExample();example.createCriteria().andClueUidEqualTo(id).andDeletedEqualTo(false).andReceivedEqualTo(false).andCreateTimeGreaterThan(now-cluetime);example.setOrderByClause("create_timeasc");returnexample;})//获取该被邀请人所有未过期且未被领取的线索的线索.map(clueMapper::selectByExample).filter(StringUtil::isNotEmpty).ifPresent(clues->{finalClueRespclueResp=Optional.of(req).filter(c->{c.count=clues.size();returntrue;}).map(this::awardValue).orElseThrow(()->ExceptionUtil.createParamException("参数错误"));finalIntegerspecialId=req.getIsHead()?clues.get(0).getId():clues.get(clues.size()-1).getId();clues.stream().peek(clue->{finalAwardConfigawardConfigclone=Optional.of(awardConfig).map(JSONUtil::obj2Json).map(json->JSONUtil.json2Obj(json,AwardConfig.class)).orElseGet(AwardConfig::new);awardConfigclone.setMoney(Optional.of(clue.getId()).filter(specialId::equals).map(e->clueResp.specialReward.longValue()).orElse(clueResp.otherAverageReward.longValue()));eventActionService.assembleAward(awardConfigclone,clue.getAdviserUid(),clue.getAdviserUid(),clue.getClueUid(),eventAction,newPasMessageParam(),clue.getId(),AwardRelationType.Clud.code());}).forEach(clue->{clue.setOrderNo(req.orderNo);clue.setCommodityName(req.commodityName);clue.setOrderAmount(req.orderAmount);clue.setReceived(true);clue.setModifyTime(now);clueMapper.updateByPrimaryKeySelective(clue);});});
关于“java代码实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注恰卡编程网行业资讯频道,小编每天都会为大家更新不同的知识点。