在不使用循环的情况下合并string-Array / arrayList

时间:2014-03-26 13:05:49

标签: java arraylist arrays array-merge

我试图做类似的事情:

ArrayList<String> getMerged ( String host, String port, String filesToCopy ){
  ArrayList<String> merged = new ArrayList<String>();
  merged.add(host);
  merged.add(port);
  merged.addAll(filesToCopy.split(","));   //which is invalid
  return merged;
}

我想知道我们是否可以添加 filesToCopy.split(&#34;,&#34;)的元素而不会产生使用循环的开销。

另外,如果上面的操作可以在字符串数组中完成,比如说 String [] merged (如果需要的话,也可以将filesToCopy作为String []传递),那么它会更好结束,我将把这个arrayList转换成一个数组。

我是Java编程的新手,所以请不要介意这是一个愚蠢的问题。

3 个答案:

答案 0 :(得分:1)

您可以在一个阵列中执行此操作:

String[] files = filesToCopy.split(","); // filesToCopy is an ArrayList, so I'm not
                                         // sure how this works; I'm assuming it's
                                         // a typo. Just get the files array somehow
String[] merged = new String[2 + files.length];
merged[0] = host;
merged[1] = port;
for (int i = 2; i < merged.length; i++) {
    merged[i] = files[i-2];
}

或者,没有“循环的开销”:

merged[0] = host;
merged[1] = port;
System.arraycopy(files, 0, merged, 2, files.length);

当然,这仍然使用“幕后”循环,这是不可避免的。

答案 1 :(得分:1)

ArrayList.addAll方法需要Collection作为参数,所以只需传递filesToCopy:

String [] getMerged ( String host, String port, ArrayList<String> filesToCopy ){
  ArrayList<String> merged = new ArrayList<String>();
  merged.add(host);
  merged.add(port);
  merged.addAll(filesToCopy); 
  return merged.toArray(new String[merged.size());
}
PS:我只是一个意见问题,但如果我可以在数组和集合之间进行选择,我总是喜欢使用集合(List,Set)。可变尺寸和易插入是需要考虑的事项。

答案 2 :(得分:1)

我不确定您的需求是什么。但我相信以下方法中的任何一种都一定能帮助您..

1.Covert String with Comma To ArrayList

<强>程序:

    import java.util.Arrays;
    ....  
    String name="java,php,c";
    List<String> list=Arrays.asList(name.split(","));
    System.out.println(" "+list);

<强>输出:

    [java, php, c]

2.Covert ArrayList To StringArray

这里我们可以将第一种方法中得到的相同的arraylist转换为字符串数组。

<强>程序:

    String []names=list.toArray(new String[list.size()]);
    for(String s:names){
            System.out.println(""+s);
    }

<强>输出:

    java
    php
    c

3.Covert ArrayList To Comma Seperated String

这里我们可以将第一种方法中得到的相同的arraylist转换为字符串数组。

为此,您需要将commons-lang3-3.2.1.jar添加到类路径或项目库中。

您可以下载commons-lang3-3.2.1.jar(HERE

<强>程序:

    import org.apache.commons.lang3.StringUtils;
    .....
    String name=StringUtils.join(list, ",");
    System.out.println("name="+name);

<强>输出:

    name=java,php,c

4.更新程序

这可能是我需要的方法

public String[] getMerged(String host, String port, String filesToCopy) {
    String files[] = filesToCopy.split(",");
    String[] merged = new String[(2 + files.length)];
    merged[0] = host;
    merged[1] = port;
    System.arraycopy(files, 0, merged, 2, files.length);
    return merged;
}

检查这些方法,如果您的需求不是这些方法,请通知我。