Converting 'ArrayList<String> to 'String[]' in Java
如何将EDCOX1的0个对象转换为Java中的EDCOX1×1数组?
- 用JDK-11的更新方法给出了这个答案,在toArray(T[])中引入了一个性能相同的新API,在语法上与Stream.toArray相似。
1 2
| List <String > list = .. ;
String[] array = list. toArray(new String[0]); |
例如:
1 2 3 4 5
| List <String > list = new ArrayList <String >();
//add some stuff
list. add("android");
list. add("apple");
String[] stringArray = list. toArray(new String[0]); |
没有任何参数的传递方法的toArray()Object[]归来。所以你要传递的参数数组的一种,它会填充与从列表中返回的数据,和。你可以通孔阵列的一个空的,但你也可以通过所需的大小与一阵列。
重要更新:在new String[list.size()]originally:代码使用。然而,这篇optimizations透露,由于是使用虚拟机,new String[0]更好的现在。
- 美国能源部的尺寸的参数作出任何区别吗?
- 它保存一个阵列instnatiation
- 这个预警信息显示在两个logcat:转换字符串:0x12 typedvalue(t=0x0 A / D = R = = 3 0x7f050009 }
- "thorbj & # 248;rnravnandersen:size of the阵列不作出任何区别functionally但如果你通它在与你的权利的大小,拯救银行resizing JVM的工作信息。
- 出,会提供一个零长度列阵,甚至创造了它,它正在举行斋戒,冰上平均比allocating阵列权的大小。基准和解释:看到这里shipilev.net /博客/年/阵列古人智慧
- "stuartmarks它是唯一与我,sun jvm的在线测试。没有担保的信息将是对其他系统的性质(如Android运行时)或IBM JVM,这是用很多在线的服务器。
- 在"powerlord对不起,这与你。也许你可以运行一些测试平台对这些结果和报告。我想很多人会找到他们的兴趣。
- 而荒谬的。仿制药的战略已经辨别;为什么不能,他们只是有一个功能,它为返回数组的内部类型?
- (我很抱歉。rhetorical问题。冰的答案,当然,因为Java不做实时仿制药;它只是他们mostly fakes市铸造对象)
- "nyerguds你永远不会知道的。你会看到它在Java项目10通瓦尔哈拉
- "你能解释如何nyerguds Java泛型的假disallow这样的功能吗?
- "lyuboslavkanev问题是具有"通用型在Java中没有足够的创造物实际上是基于类型;甚至不安的阵列(这是荒谬的,因为这是应该对任何类型的工作)。好的,可以用它做为父亲,我可以看到,冰铸造。事实上,两个点创建对象的类型,你需要有Class对象的实际,这似乎是完全不可能的两个derive从通用型。"这个理由,我说,这是整个建设人造冰;它的所有仓库internally只是为对象。
- nyerguds"中看到的,谢谢。
- "从那一bozho:你像两条底线:toarray(新的T(0))似乎是更安全的,清洁的,contractually鸭,鸭,因此应该是现在的默认选择。未来的世界杯的性能优化可以关闭这个差距为toarray(size t [新])。"流"两个believed在线优化"usages夫妇和我最佳的一个。在进一步的改进toarray API将遵循相同的逻辑toarray(As New t o)??《收藏它应该创建适当的存储。
一个选择8:在Java
- 有任何的好处是使用性能的方法吗?
- 或任何好处吗?
- 这是我的prefer语法,但一个编译器IntelliJ显示误差与投诉说,"[吨]冰槽A接口的功能。"
- "你可以只使用glenmazza toArray在一Stream对象。这occur编制误差可以减少,如果你采用"流Collectors然后apply试图toArray。
你可以使用方法:toArray()List
1 2 3 4 5 6
| ArrayList <String > list = new ArrayList <String >();
list. add("apple");
list. add("banana");
String[] array = list. toArray(new String[list. size()]); |
或你可以手动添加到一个数组中的元素。
1 2 3 4 5 6 7 8 9 10
| ArrayList <String > list = new ArrayList <String >();
list. add("apple");
list. add("banana");
String[] array = new String[list. size()];
for (int i = 0; i < list. size(); i ++) {
array [i ] = list. get(i );
} |
希望这帮助!
1 2 3
| ArrayList <String > arrayList = new ArrayList <String >();
Object[] objectList = arrayList. toArray();
String[] stringArray = Arrays. copyOf(objectList,objectList. length, String[]. class); |
用他做,也可能是到阵列ArrayList的。
- 知道的婊子"camelcase ObjectList =……"和"stringarray"。也,它是arrays.copyof ...capital O。
- list.toarray internally辨别arrays.copyof()()
从一开始的JDK(11,Collection.toArray(IntFunction generator)CAN或者使用相同的API实现的:
1 2 3
| List <String > list = List. of("x", "y", "z");
String[] arrayBeforeJDK11 = list. toArray(new String[0]);
String[] arrayAfterJDK11 = list. toArray(String[]::new); // similar to Stream.toArray |
8:在Java
1
| String[] strings = list. parallelStream(). toArray(String[]::new); |
- 这是真的已经包含在这个答案。也许添加它作为一个编辑,而不是两个答案说作为一个新的一个。
- 为什么parallelStream()而不是简单的stream()吗?
泛型解决任何List隐蔽到String []:
1 2 3 4 5 6
| public static <T > String[] listToArray (List <T > list ) {
String [] array = new String[list. size()];
for (int i = 0; i < array. length; i ++)
array [i ] = list. get(i ). toString();
return array ;
} |
你必须注意override toString()方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Car {
private String name ;
public Car (String name ) {
this. name = name ;
}
public String toString () {
return name ;
}
}
final List <Car > carList = new ArrayList <Car >();
carList. add(new Car ("BMW"))
carList. add(new Car ("Mercedes"))
carList. add(new Car ("Skoda"))
final String[] carArray = listToArray (carList ); |
1 2 3 4 5 6
| List <String > list = ...
String[] array = new String[list. size()];
int i =0;
for(String s : list ){
array [i ++] = s ;
} |
- 本厂,但不是超高效的功能性和duplicates accepted答案与额外的代码。
你可以使用到的元素的Iteratoriterate ArrayList:
1 2 3 4 5 6
| ArrayList <String > list = new ArrayList <>();
String[] array = new String[list. size()];
int i = 0;
for (Iterator <String > iterator = list. iterator(); iterator. hasNext(); i ++) {
array [i ] = iterator. next();
} |
现在你可以使用任何从String[]retrive元素循环。
- 在downvoted因为:1。没有使用泛型的力量,你为2。利用.toString()从没有显现将是需要的,3。你甚至不会i增量,和4。这将是更好的whilereplaced by a for断。suggested ArrayList stringList = ... ; String[] stringArray = new String[stringList.size()]; int i = 0; for(Iterator it = stringList.iterator(); it.hasNext(); i++) { stringArray[i] = it.next(); }代码:
- 好的,我得到它。谢谢。
- 好吧,理想情况下,您应该编辑您的代码来包含那些注释(即…如果你认为他们很适合你的回答!)。在代码保持不变的情况下,我不会考虑删除我的否决权。
- 我是新来的,所以我还不知道这里的工作原理。不过,谢谢你的帮助。
- 这样好多了!我刚编辑过一点,但您刚刚体验过它的工作原理:提供答案,改进它们,获得桂冠;)
如果你的应用程序是使用Apache Commons库已经小幅修改,你可以接受到的答案不创建新数组,每个空时:
1 2 3 4 5
| List <String > list = .. ;
String[] array = list. toArray(ArrayUtils. EMPTY_STRING_ARRAY);
// or if using static import
String[] array = list. toArray(EMPTY_STRING_ARRAY ); |
有几个不同类型的多preallocated ArrayUtils空数组中。
我们可以创建一个Java虚拟机也在上演到空数组是这样的:美国
1 2 3 4
| String[] array = list. toArray(ArrayUtils. toArray());
// or if using static import
String[] array = list. toArray(toArray ()); |
但有一个真正的优势在这样的问题,只是一味的,海事组织。
在一些额外的操作的实例,其中所需的数据是,如果用户想要的功能,这个方法是不完美的,需要通过它的第二级的元参数),但作品:
java.util.arraylist进出;java.lang.reflect.array进出;
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Test {
public static void main (String[] args ) {
ArrayList <Integer > al = new ArrayList <>();
al. add(1);
al. add(2);
Integer[] arr = convert (al, Integer. class);
for (int i =0; i <arr. length; i ++)
System. out. println(arr [i ]);
}
public static <T > T [] convert (ArrayList <T > al, Class clazz ) {
return (T []) al. toArray((T [])Array. newInstance(clazz, al. size()));
}
} |
你可以转换到字符串数组列表,利用这个方法:
1
| Object[] stringlist =list. toArray(); |
例子:全集
1 2 3 4 5 6 7 8 9 10
| ArrayList <String > list =new ArrayList <>();
list. add("Abc");
list. add("xyz");
Object[] stringlist =list. toArray();
for(int i = 0; i < stringlist. length ; i ++)
{
Log. wtf("list data:", (String)stringlist [i ]);
} |
java可以做8,它的使用
1
| String[] arrayFromList = fromlist. stream(). toArray(String[]::new); |
在Java中,我们可以使用Collection.toArray(generator)11的方法。下面的代码将创建一个新字符串数组:
1 2
| List <String > list = List. of("one", "two", "three");
String[] array = list. toArray(String[]::new) |
从java.util.Collection.toArray()java.base’s。
1 2 3 4 5 6 7
| private String[] prepareDeliveryArray (List <DeliveryServiceModel > deliveryServices ) {
String[] delivery = new String[deliveryServices. size()];
for (int i = 0; i < deliveryServices. size(); i ++) {
delivery [i ] = deliveryServices. get(i ). getName();
}
return delivery ;
} |
1 2 3 4 5
| List <String > list = new ArrayList <>();
list. add("a");
list. add("b");
list. add("c");
String [] strArry = list. stream(). toArray(size -> new String[size ]); |
第一个列表是一个字符串,转换流。然后,它使用一种stream.toarray返回的数组元素的字符串流。"尺寸尺寸] > [字符串"这是一allocates intfunction函数字符串字符串流阵列的大小。它可以rearranged的
1 2 3 4
| IntFunction <String []> allocateFunc = size -> {
return new String[size ];
};
String [] strArry = list. stream(). toArray(allocateFunc ); |
- 这个答案有什么价值?它似乎只是重复其他答案而没有解释它为什么回答这个问题。