[英]How to convert List of any object to an array with the same type?
鉴于我有如下对象列表:
import java.util.List;
List<Protocol> protocolsTestData
我希望将此列表转换为具有相同类型的数组,例如Protocol[]
。 然后我可以使用以下代码:
Protocol[] protocolsTestDataArray = new Protocol[protocolsTestData.size()];
protocolsTestData.toArray(protocolsTestDataArray);
但是,上面的代码仅适用于类型Protocol
,但我需要具有通用 function 它将任何类型的列表转换为具有相同类型的数组!
以下是简洁和最佳的。
Protocol[] protocolsTestDataArray = protocolsTestData.toArray(new Protocol[0]);
您不需要优化创建正确大小的数组,同时上面的 JVM 字节代码甚至比您的代码更快。 对于任何通用解决方案,仍然需要传递数组构造函数。
Stream 版本:
Protocol[] protocolsTestDataArray = protocolsTestData.stream()
.toArray(Protocol[]::new);
一个(多余的)通用 function:
public static <A> A[] toArray(List<A> list, IntFunction<A[]> generator) {
return list.toArray(generator.apply(list.size()));
}
Protocol[] protocolsTestDataArray = toArray(protocolsTestData, Protocol[]::new);
function 需要知道实际A[]
构造函数,因为缺少关于 A 的信息(java 的类型擦除)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.