目录
概述
在本文章中,我们对如何在 java 中对 array 和 set 进行转换进行一些说明和示例。
这些示例通过使用 core java 和一些第三方的转换工具,例如 guava 和 apache commons collections。
从 list 转换为 set
使用原生 java 代码
让我们首先来看看如何在原生 java 中把数组转换为 set。
通过下面的代码,我们了解到首先需要把 array 转换为 list,然后再把这个 list 转换为 set。
@test public void givenusingcorejavav1_whenarrayconvertedtoset_thencorrect() { integer[] sourcearray = { 0, 1, 2, 3, 4, 5 }; settargetset = new hashset (arrays.aslist(sourcearray)); }
可选的,我们可以首先定义一个 set 对象,然后把这个 set 对象的元素进行填充:
@test public void givenusingcorejavav2_whenarrayconvertedtoset_thencorrect() { integer[] sourcearray = { 0, 1, 2, 3, 4, 5 }; settargetset = new hashset (); collections.addall(targetset, sourcearray); }
使用 guava
我们可以使用 guava 转换工具来把数组给出的数组来进行初始化。
@test public void givenusingguava_whenarrayconvertedtoset_thencorrect() { integer[] sourcearray = { 0, 1, 2, 3, 4, 5 }; settargetset = sets.newhashset(sourcearray); }
使用 apache commons collections
最后我们可以使用 apache 的 commons collection 的库来进行处理。
这个处理方法和我们使用原生 java 代码差不多,首先需要对 set 进行初始化,然后再把 set 中的元素进行填充。
@test public void givenusingcommonscollections_whenarrayconvertedtoset_thencorrect() { integer[] sourcearray = { 0, 1, 2, 3, 4, 5 }; settargetset = new hashset<>(6); collectionutils.addall(targetset, sourcearray); }
从 set 转换为 array
使用原生 java
set 中有一个 toarray 的方法,你可以直接使用这个方法来把给出的 set 转换为 array。
@test public void givenusingcorejava_whensetconvertedtoarray_thencorrect() { setsourceset = sets.newhashset(0, 1, 2, 3, 4, 5); integer[] targetarray = sourceset.toarray(new integer[0]); }
需要注意的是,我们在这里使用了 toarray(new t[0]) 来对变量进行初始化,相对使用 toarray(new t[size]) 这个方法。
使用 toarray(new t[0]) 来对数组进行初始化更加安全,快速,易读。
使用 guava
下一步,让我们来使用 guava 的 api 来进行转换。
@test public void givenusingguava_whensetconvertedtoarray_thencorrect() { setsourceset = sets.newhashset(0, 1, 2, 3, 4, 5); int[] targetarray = ints.toarray(sourceset); }
ints 中有一个 toarray 的方法,这个方法将会把整数类型的 list 转换为 array。
需要注意的是 ints 的类型需要和数组中的类型进行匹配才可以。
结论
在 java 的集合类型直接进行转换是我们需要经常进行操作的方法和需求。
guava 的方法 sets 中通常能够对 set 进行比较好的操作,包括对 set 的对象进行初始化。
我们可以用这个对象中的初始化参数来对数组转换为 set。
使用 commons collections 还是有点晦涩。