Java中如何将Collection<Integer>转换为int[]数组适配可变参数方法
问题背景
- 现有两个重载的
getDetails(...)方法:- 可变参数版本:要求调用方至少传入1个必填参数
- 集合参数版本:接收集合类型入参,原实现不对集合的内容、大小做任何校验
- 根据业务规则,调用
getDetails方法时必须至少传入1个有效值,但实际使用中集合参数版本经常被误传入空集合,因此计划将接收集合类型参数的方法访问权限修改为private,从根源上避免外部错误调用。
现有代码实现
对外暴露的可变参数版本
该版本通过强制传入第一个int参数的设计,保证调用方至少传入1个有效id:
// There are two params, to make sure that at-least one is passed by the caller public static CustomerContext getDetails(int id, int... ids) { Collection<Integer> idCollection = Instream.of(ids).boxed().collect(Collectors.toSet()); if(!idCollection.contains(id)){ idCollection.add(id); } return getDetails(idCollection); }
待调整权限的集合参数版本
计划将该方法的访问权限从public改为private,禁止外部直接传入空集合触发非法调用:
public static CustomerContext getDetails(Collection<Integer> idCollection) { return getDetails(idCollection,false); }
待改造的存量调用点
当前存在一处直接调用集合参数版本的代码,传入的是Map的values集合:
CustomerContext.getDetails(id.getDetails().values());
其中被调用的id.getDetails()方法实现如下,返回的是不可修改的Map:
public Map<Id,Integer> getDetails(){ return Collections.unmodifiableMap(details); }
待解决问题
需要将id.getDetails().values()返回的Collection<Integer>转换为int[]类型,从而适配可变参数版本的getDetails(int id, int... ids)方法,替代原有直接调用集合参数版本的写法。
目前仅能通过如下代码将集合转换为Integer[]数组,未找到直接将Collection转换为int[]数组的可行方案:
(Integer[])id.getDetails().values().toArray()
此前查阅过相关技术问答内容,仍未解决该转换问题。
内容的提问来源于stack exchange,提问作者explorer
相关产品推荐
相关产品推荐

