Java 按类型将集合转换为数组
我测试了这段代码:Java 按类型将集合转换为数组,java,arrays,collections,Java,Arrays,Collections,我测试了这段代码: Collection l = new ArrayList<Object>(); l.add(5); l.add("test"); l.add(6); Integer[] arr= l.toArray(new Integer[2]); 可能还有其他过滤方法,但我需要了解toArray(Object[]a)方法。为什么我不能通过告诉数组的类型和大小进行过滤 为什么我不能通过告诉数组的类型和大小进行过滤 因为这不是toArray()所做的,它也没有说它可以用作过滤
Collection l = new ArrayList<Object>();
l.add(5);
l.add("test");
l.add(6);
Integer[] arr= l.toArray(new Integer[2]);
可能还有其他过滤方法,但我需要了解toArray(Object[]a)
方法。为什么我不能通过告诉数组的类型和大小进行过滤
为什么我不能通过告诉数组的类型和大小进行过滤
因为这不是toArray()
所做的,它也没有说它可以用作过滤器
函数和API对它们做什么(有时是如何做的)有定义。如果一个函数不是设计用来做什么的,你就不能期望它做你想做的事情
为什么我不能通过告诉数组的类型和大小进行过滤
因为这不是toArray()
所做的,它也没有说它可以用作过滤器
函数和API对它们做什么(有时是如何做的)有定义。如果函数的设计不是这样的,您就不能期望它执行您希望它执行的操作。
toArray
尝试将整个集合存储在给定数组中。如果你想过滤它,你必须自己过滤。例如:
Integer[] arr =
l.stream().filter(x -> x instanceof Integer).toArray(Integer[]::new);
toArray
尝试在给定数组中存储整个集合。如果你想过滤它,你必须自己过滤。例如:
Integer[] arr =
l.stream().filter(x -> x instanceof Integer).toArray(Integer[]::new);
请查看该方法的java文档。每个方法都按照它向外界声明的契约(按照签名或java文档)工作
T[]toArray(T[]a);在其java文档中明确指出了以下语句。
Throws:ArrayStoreException-如果指定数组的运行时类型不是此集合中每个元素的运行时类型的超类型
在您的案例中,每个元素的类型都不是
整数
请查看该方法的java文档。每个方法都按照它向外界声明的契约(按照签名或java文档)工作
T[]toArray(T[]a);在其java文档中明确指出了以下语句。
Throws:ArrayStoreException-如果指定数组的运行时类型不是此集合中每个元素的运行时类型的超类型
在您的情况下,每个元素的类型不是
Integer
toArray
不用于过滤集合;将特定类型的数组传递给toArray
是将整个集合复制到该数组的指令。toArray
不用于过滤集合;将特定类型的数组传递给toArray
是一条将整个集合复制到该数组的指令。@YassinHajaj编辑并没有改善代码的可读性,它确实改善了很多。@YassinHajaj编辑并没有改善代码的可读性,它确实改善了很多。
<T> T[] toArray(T[] a); Clearly says in its java doc the below statement.