Java中Long类型List转long数组及add方法报错问题
解决List转long[]及add方法报错的问题
先搞定add(int)找不到方法的坑
你定义的是List<Long>泛型集合,它只能接受Long类型的元素。你传入的121145788是int字面量,Java会自动把它装箱成Integer,但Integer和Long是完全不同的包装类型,编译器自然找不到匹配的add方法。
解决起来超简单,给数字加上L后缀,让它变成Long类型的字面量就行:
list.add(121145788L); list.add(1245898L);
要是你习惯显式装箱,也可以这么写:
list.add(Long.valueOf(121145788));
再处理List转long[]数组的需求
Java标准库没有直接提供这个转换的工具方法,但有两种常用的实现方式:
方式1:Java 8+用Stream API(最简洁)
借助Stream的映射和转换能力,一行代码就能搞定:
long[] arr = list.stream() .mapToLong(Long::longValue) .toArray();
原理是先把List转成流,再把每个Long对象拆箱成long基本类型,最后生成对应的数组。
方式2:手动遍历(兼容Java 8之前的版本)
如果你的项目还在使用老版本Java,手动遍历也很直观:
long[] arr = new long[list.size()]; for (int i = 0; i < list.size(); i++) { arr[i] = list.get(i); // Long会自动拆箱成long }
修正后的完整代码
package collections; import java.util.ArrayList; import java.util.List; public class ListToArray { private static List<Long> list; public static void main(String[] args){ list = new ArrayList<Long>(); list.add(121145788L); // 加上L后缀指定Long类型 list.add(1245898L); // 用Stream转数组的写法 long[] arr = list.stream() .mapToLong(Long::longValue) .toArray(); // 或者手动遍历的写法(注释掉上面的Stream代码后启用) // long[] arr = new long[list.size()]; // for (int i = 0; i < list.size(); i++) { // arr[i] = list.get(i); // } } }
内容的提问来源于stack exchange,提问作者redsoxlost
相关产品推荐
相关产品推荐

