Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Нету регулярного метода склейки массивов?


Автор: Andrey1 14.7.2009, 18:35
Нашел только это:
http://stackoverflow.com/questions/80476/how-to-concatenate-two-arrays-in-java

(пришлось переписывать под свою задачу второй сверху ответ).

Автор: Дрон 14.7.2009, 18:47
В Java вообще очень мало методов "для удобства".
Надо либо изобретать велосипед, либо некоторые рекомендуют смотреть в сторону http://commons.apache.org/. Но лично я им не пользовался.

http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/ArrayUtils.html

Добавлено через 2 минуты и 18 секунд
Ой, протупил. Первый ответ по ссылке на stackoverflow и предлагает пользоваться этими самыми Apache Commons smile

Автор: niasilil 16.7.2009, 09:45
думаю - всего же две строчки кода, дай ка напишу. 
Код

    public static String[] combine (String[] a, String[] b){
        ArrayList<String> both = new ArrayList<String>();
        both.addAll(Arrays.asList(a));
        both.addAll(Arrays.asList(b));
        return both.toArray(new String[a.length + b.length]);
    }

все просто, а почему бы не сделать generics
Код

    public static<T> T[] combine (T[] a, T[] b){
        ArrayList<T> both = new ArrayList<T>();
        both.addAll(Arrays.asList(a));
        both.addAll(Arrays.asList(b));
        return both.toArray(new T[a.length + b.length]);
    }

а нифига не компилируется. Оказывается Cannot create a generic array of T
Неудивительно что этого метода до сих пор нет в классе Arrays

удивительно.

Автор: math64 16.7.2009, 15:31
Код

public class Main {

  public static <T> T[] combine(T[] a, T[] b) {
    int length = a.length + b.length;
    Object res = java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), length);
    System.arraycopy(a, 0, res, 0, a.length);
    System.arraycopy(b, 0, res, a.length, b.length);
    return (T[])res;
  }
  
  public static void main(String[] args) {
    String[] a = { "1", "2", "3" };
    String[] b = { "4", "5", "6" };
    String[] c = combine(a, b);
    for (int i = 0; i < c.length; i++) {
      System.out.println(c[i]);
    }
  }

}


Автор: niasilil 19.7.2009, 06:51
hmm, reflection. Неплохо.  smile 
Код

public static<T> T[] combine (T[] a, T[] b){
    ArrayList<Object> both = new ArrayList<Object>();
    both.addAll(Arrays.asList(a));
    both.addAll(Arrays.asList(b));
    Object res = Array.newInstance(a.getClass().getComponentType(), a.length + b.length);
    return both.toArray((T[])res);
}

math64, твой метод лучше

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)