Apex类匹配两个自定义对象字段报错,求代码优化修复方案
问题原因说明
- 第2行报错:你声明的
matchPositionsWithCandidate()方法返回类型为String,但方法内没有对应return语句;同时方法结束的}位置错误,把后续候选人匹配逻辑直接暴露在类作用域下,直接触发了第二个语法报错。 - 第26行报错:除了上述方法提前闭合的问题外,原代码最后两层循环少写了一个结束
},语法结构不闭合。
优化后可运行代码
为了适配LWC数据表格的展示需求,代码新增了Aura注解和前端友好的返回包装结构,可直接在开发者控制台运行,也可直接被LWC调用:
public class MatchPosition { // 岗位匹配结果包装类,适配LWC数据表格渲染 public class PositionMatchResult { @AuraEnabled public String positionName {get; set;} @AuraEnabled public String positionLocation {get; set;} @AuraEnabled public List<CandidateInfo> matchedCandidates {get; set;} } // 候选人信息包装类 public class CandidateInfo { @AuraEnabled public String fullName {get; set;} @AuraEnabled public String email {get; set;} @AuraEnabled public String mobile {get; set;} } @AuraEnabled(cacheable=true) public static List<PositionMatchResult> matchPositionsWithCandidate() { Set<String> validStatus = new Set<String>{'New', 'Open'}; List<Position__c> openPositions = [ SELECT Id, Name, Location__c, Status__c FROM Position__c WHERE Status__c IN :validStatus ]; // 按「岗位名称-地点」生成岗位映射 Map<String, Position__c> positionKeyMap = new Map<String, Position__c>(); for (Position__c pos : openPositions) { if(pos.Name != null && pos.Location__c != null) { String key = pos.Name + '-' + pos.Location__c; positionKeyMap.put(key, pos); } } // 按「意向岗位-所在地点」分组候选人 Map<String, List<Candidate__c>> candidateGroupMap = new Map<String, List<Candidate__c>>(); List<Candidate__c> allCandidates = [ SELECT Position__c, Location__c, Mobile__c, First_Name__c, Last_Name__c, Email__c FROM Candidate__c ]; for (Candidate__c can : allCandidates) { if(can.Position__c == null || can.Location__c == null) { continue; } String key = can.Position__c + '-' + can.Location__c; if(!candidateGroupMap.containsKey(key)) { candidateGroupMap.put(key, new List<Candidate__c>()); } candidateGroupMap.get(key).add(can); } // 组装匹配结果 List<PositionMatchResult> matchResult = new List<PositionMatchResult>(); for(String key : positionKeyMap.keySet()) { Position__c currentPos = positionKeyMap.get(key); PositionMatchResult resultItem = new PositionMatchResult(); resultItem.positionName = currentPos.Name; resultItem.positionLocation = currentPos.Location__c; resultItem.matchedCandidates = new List<CandidateInfo>(); // 匹配到候选人则填充信息 if(candidateGroupMap.containsKey(key)) { for(Candidate__c matchedCan : candidateGroupMap.get(key)) { CandidateInfo canInfo = new CandidateInfo(); canInfo.fullName = matchedCan.First_Name__c + ' ' + matchedCan.Last_Name__c; canInfo.email = matchedCan.Email__c; canInfo.mobile = matchedCan.Mobile__c; resultItem.matchedCandidates.add(canInfo); } } matchResult.add(resultItem); } return matchResult; } }
验证方式
在开发者控制台匿名执行窗口运行如下代码即可查看匹配结果:
System.debug(MatchPosition.matchPositionsWithCandidate());
内容的提问来源于stack exchange,提问作者Cintra
相关产品推荐
相关产品推荐

