Как мне объединить два списка в Java?

select * from shirts where find_in_set('1',colors) <> 0

Работает для меня

658
задан Robert Atkins 9 October 2008 в 23:17
поделиться

10 ответов

Первое, что пришло на ум я могу сократить его одной строкой:

List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);
519
ответ дан AdamC 9 October 2008 в 23:17
поделиться

Я не могу изменить к лучшему с двумя лайнерами в общем случае, не представляя Ваш собственный служебный метод, но если у Вас действительно есть списки Строк, и Вы готовы предположить, что те Строки не содержат запятые, можно вытянуть эту длинную остроту:

List<String> newList = new ArrayList<String>(Arrays.asList((listOne.toString().subString(1, listOne.length() - 1) + ", " + listTwo.toString().subString(1, listTwo.length() - 1)).split(", ")));

при отбрасывании дженериков это должно быть совместимым JDK 1.4 (хотя я не протестировал это). Также не рекомендуемый для производственного кода;-)

-5
ответ дан Dov Wasserman 9 October 2008 в 23:17
поделиться

Я не утверждаю, что это просто, но Вы упомянули премию для острот;-)

Collection mergedList = Collections.list(new sun.misc.CompoundEnumeration(new Enumeration[] {
    new Vector(list1).elements(),
    new Vector(list2).elements(),
    ...
}))
0
ответ дан 2 revs, 2 users 92% 9 October 2008 в 23:17
поделиться

Можно сделать остроту, если целевой список предварительно объявляется.

(newList = new ArrayList<String>(list1)).addAll(list2);
13
ответ дан deterb 9 October 2008 в 23:17
поделиться

Немного короче был бы:

List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);
20
ответ дан Jorn 9 October 2008 в 23:17
поделиться

Немного более простой:

List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);
24
ответ дан Xaerxess 9 October 2008 в 23:17
поделиться

Вероятно, не более простой, но интригующий и ужасный:

List<String> newList = new ArrayList<String>() { { addAll(listOne); addAll(listTwo); } };

не используют его в производственном коде...;)

81
ответ дан Tim Cooper 9 October 2008 в 23:17
поделиться

Используйте класс Помощника.

я предлагаю:

public static <E> Collection<E> addAll(Collection<E> dest, Collection<? extends E>... src) {
    for(Collection<? extends E> c : src) {
        dest.addAll(c);
    }

    return dest;
}

public static void main(String[] args) {
    System.out.println(addAll(new ArrayList<Object>(), Arrays.asList(1,2,3), Arrays.asList("a", "b", "c")));

    // does not compile
    // System.out.println(addAll(new ArrayList<Integer>(), Arrays.asList(1,2,3), Arrays.asList("a", "b", "c")));

    System.out.println(addAll(new ArrayList<Integer>(), Arrays.asList(1,2,3), Arrays.asList(4, 5, 6)));
}
3
ответ дан alex 9 October 2008 в 23:17
поделиться

Вы могли сделать это со статическим импортом и классом

nb помощника, generification этого класса мог, вероятно, быть улучшен

public class Lists {

   private Lists() { } // can't be instantiated

   public static List<T> join(List<T>... lists) {
      List<T> result = new ArrayList<T>();
      for(List<T> list : lists) {
         result.addAll(list);
      }
      return results;
   }

}

Тогда, можно сделать вещи как

import static Lists.join;
List<T> result = join(list1, list2, list3, list4);
5
ответ дан FDinoff 9 October 2008 в 23:17
поделиться

Вы можете использовать библиотеку Apache commons-collections:

List<String> newList = ListUtils.union(list1, list2);
275
ответ дан 22 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: