通过stream流的形式从数据库中查出一个集合:
List<Long> modeId = scpRoleModMapper.selectScpRoleModByIdList(authConfigRequesBean.getRoleId())
.stream()
.filter(Objects::nonNull)
.map(scpRoleMod -> scpRoleMod.getModelId())
.collect(Collectors.toList());
将集合转换成数组的形式:
(1)、Long [] ids = (Long [])modeId.toArray();
(2)、Long[] ids= new Long[modeId.size()];
modeId = modeIdList.stream().toArray(modeId);
使用以上两种方式将list转换为Long[]数组时候产生:[Ljava.lang.对象;无法转换为[Ljava.lang.Long;的异常,是因为.toArray()转换数组是Object[],相当于初始化数组就是Object[]类型,Object[]数组通过强转是无法转换为其他类型的数组(注意),但是一开始初始化数组为基本数据类型或者包装类,先转换为object[]数组,可以通过强转的形式将Object[]数组转换为初始化类型的数组。
原因:主要是底层源码 的原因,想要了解可以链接了解一下:(8条消息) Java数组 强制类型转换_划水大圣的博客-CSDN博客_java数组强制类型转换
解决方法:
1、笨方法:循环转数组
int size = modeId.size();
Long[] ids = new Long[size];
for (int i = 0; i < size; i++) {
ids[i] = modeId.get(i);
}
2、经过查阅资料和博客和自己测试推荐的方法(通过stream流的形式解决)
Long[] ids = modeId.stream().toArray(Long[]::new);
以上两种方式均可以使用,但是推荐第二种,希望可帮助到大家!!!