繁体   English   中英

如何将任何 object 的列表转换为具有相同类型的数组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM