嗨,我想要以编程方式组合这三个静态对象。例如:
private static final String[] DESEASE = new String[] {
"Alcoholism", "Animal Desease", "Brain Desease", "Demantia", "Movement Disorder"
};
private static final String[] GENE = new String[] {
"A1CF", "A2LD1", "A2M", "AA06", "AA1"
};
private static final String[] GEO = new String[] {
"GSE14429", "GSE4226", "GSE8632", "GS9134", "GSE8641"
};
我不想迭代。想要做一些类型的事情:
String[] resultList = DESEASE resultList.addAll(GENE).addAll(GEO);
答案 0 :(得分:1)
我认为这不是一个非常简洁的方法。这将是有效的,不使用第三方库,但不完全漂亮:
private static final String[] resultList;
static {
List<String> tmpList = new ArrayList<String>(Arrays.asList(DESEASE));
tmpList.addAll(Arrays.asList(GENE));
tmpList.addAll(Arrays.asList(GEO));
resultList = tmpList.toArray(new String[tmpList.size()]);
}
答案 1 :(得分:1)
您可以尝试使用Collection
,它提供了您提供的示例的几乎文字版本:
List<String> data = new ArrayList<String>();
data.addAll(Arrays.asList(DESEASE));
data.addAll(Arrays.asList(GENE));
data.addAll(Arrays.asList(GEO));
String[] resultList = data.toArray(new String[data.size()]);
基本上创建一个新的Collection并在将其转换回数组之前添加所有内容。
或者您可以使用新数组和System.arraycopy方法:
String[] resultList = new String[DESEASE.length + GENE.length + GEO.length];
System.arraycopy(DESEASE, 0, resultList, 0, DESEASE.length);
System.arraycopy(GENE, 0, resultList, DESEASE.length, GENE.length);
System.arraycopy(GEO, 0, resultList, DESEASE.length + GENE.length, GEO.length);
创建一个新阵列并将每个子阵列复制到所需的插槽中。
我实际上没有测试哪个更快但System.arraycopy输出到本机方法并没有那么多的对象创建所以我会打赌那个。
答案 2 :(得分:1)
以下是两个解决方案(集合和System.arraycopy()
):
类别:
List<String> allAsList = new ArrayList<>();
allAsList.addAll(Arrays.asList(DESEASE));
allAsList.addAll(Arrays.asList(GENE));
allAsList.addAll(Arrays.asList(GEO));
System.out.println(allAsList);
ArrayCopy:
String[] allAsArray = new String[DESEASE.length + GENE.length + GEO.length];
System.arraycopy(DESEASE, 0, allAsArray, 0, DESEASE.length);
System.arraycopy(GENE, 0, allAsArray, DESEASE.length, GENE.length);
System.arraycopy(GEO, 0, allAsArray, DESEASE.length + GENE.length, GEO.length);
System.out.println(Arrays.asList(allAsArray));
答案 3 :(得分:0)
您可以使用Google Guava中的ObjectArrays.concat(T[],T[],Class<T>)
,然后使用嵌套调用:
import static com.google.common.collect.ObjectArrays.concat;
...
final String [] resultList = concat(DESEASE, concat(GENE, GEO, String.class), String.class);
但是,列表更灵活。
答案 4 :(得分:0)
这样怎么样:
public String[] combineArray (String[] ... strings) {
List<String> tmpList = new ArrayList<String>();
for (int i = 0; i < strings.length; i++)
tmpList.addAll(Arrays.asList(strings[i]));
return tmpList.toArray(new String[tmpList.size()]);
}
您可以根据需要传递任意数量的参数:)