如何编写Java方法返回allPeopleFromTable和visibleInfo两个HashSet?
Java方法返回两个HashSet的几种实现方式
在Java中无法直接返回多个值,但可以通过以下几种方式实现同时返回两个HashSet的需求:
方案一:自定义结果封装类(推荐)
创建一个专门的类来封装需要返回的两个集合,语义清晰且易于维护:
// 自定义结果类,封装两个Set class PeopleSetsResult { private final Set<People> allPeople; private final Set<People> visiblePeople; public PeopleSetsResult(Set<People> allPeople, Set<People> visiblePeople) { this.allPeople = allPeople; this.visiblePeople = visiblePeople; } // Getter方法,供外部获取集合 public Set<People> getAllPeople() { return allPeople; } public Set<People> getVisiblePeople() { return visiblePeople; } } // 封装后的业务方法 public PeopleSetsResult processPeopleResults(List<ResultSet> resultSets) { Set<People> allPeopleFromTable = new HashSet<>(); Set<People> visibleInfo = new HashSet<>(); for (ResultSet rs : resultSets) { try { while (rs.next()) { final People people = new People(rs); // 原代码中Table应为People实体类,此处修正 allPeopleFromTable.add(people); if (isVisible(people)) { visibleInfo.add(people); } } } catch (SQLException e) { // 添加异常处理,如打印日志或抛出自定义异常 e.printStackTrace(); } } return new PeopleSetsResult(allPeopleFromTable, visibleInfo); } // 调用示例 public static void main(String[] args) { // 假设已获取resultSets List<ResultSet> resultSets = ...; YourClass instance = new YourClass(); PeopleSetsResult result = instance.processPeopleResults(resultSets); Set<People> allPeople = result.getAllPeople(); Set<People> visiblePeople = result.getVisiblePeople(); }
方案二:返回包含两个Set的数组
如果不想额外创建类,可以返回一个Set[]数组,但需注意元素顺序,可读性稍差:
public Set<People>[] processPeopleResults(List<ResultSet> resultSets) { Set<People> allPeopleFromTable = new HashSet<>(); Set<People> visibleInfo = new HashSet<>(); // 业务逻辑同方案一... @SuppressWarnings("unchecked") Set<People>[] result = new Set[]{allPeopleFromTable, visibleInfo}; return result; } // 调用示例 public static void main(String[] args) { Set<People>[] result = processPeopleResults(resultSets); Set<People> allPeople = result[0]; Set<People> visiblePeople = result[1]; }
方案三:使用Map存储返回结果
用Map的键区分两个集合,可读性不如自定义类:
public Map<String, Set<People>> processPeopleResults(List<ResultSet> resultSets) { Set<People> allPeopleFromTable = new HashSet<>(); Set<People> visibleInfo = new HashSet<>(); // 业务逻辑同方案一... Map<String, Set<People>> resultMap = new HashMap<>(); resultMap.put("allPeople", allPeopleFromTable); resultMap.put("visiblePeople", visibleInfo); return resultMap; } // 调用示例 public static void main(String[] args) { Map<String, Set<People>> resultMap = processPeopleResults(resultSets); Set<People> allPeople = resultMap.get("allPeople"); Set<People> visiblePeople = resultMap.get("visiblePeople"); }
注意事项
- 原代码中
final Table people = new Table(rs);应为People实体类实例,需根据实际情况修正。 - 处理
ResultSet时必须捕获SQLException,避免未处理异常。 - 优先选择方案一,自定义类能明确表达返回值含义,后续维护和扩展更方便。
内容的提问来源于stack exchange,提问作者pralxx
相关产品推荐
相关产品推荐

