将Java字符串数组合并到一个对象中

时间:2014-03-20 23:28:58

标签: java arrays string

嗨,我想要以编程方式组合这三个静态对象。例如:

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);

5 个答案:

答案 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()]);
}

您可以根据需要传递任意数量的参数:)