select * from shirts where find_in_set('1',colors) <> 0
Работает для меня
Первое, что пришло на ум я могу сократить его одной строкой:
List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);
Я не могу изменить к лучшему с двумя лайнерами в общем случае, не представляя Ваш собственный служебный метод, но если у Вас действительно есть списки Строк, и Вы готовы предположить, что те Строки не содержат запятые, можно вытянуть эту длинную остроту:
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 (хотя я не протестировал это). Также не рекомендуемый для производственного кода;-)
Я не утверждаю, что это просто, но Вы упомянули премию для острот;-)
Collection mergedList = Collections.list(new sun.misc.CompoundEnumeration(new Enumeration[] {
new Vector(list1).elements(),
new Vector(list2).elements(),
...
}))
Можно сделать остроту, если целевой список предварительно объявляется.
(newList = new ArrayList<String>(list1)).addAll(list2);
Немного короче был бы:
List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);
Немного более простой:
List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);
Вероятно, не более простой, но интригующий и ужасный:
List<String> newList = new ArrayList<String>() { { addAll(listOne); addAll(listTwo); } };
не используют его в производственном коде...;)
Используйте класс Помощника.
я предлагаю:
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)));
}
Вы могли сделать это со статическим импортом и классом
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);
Вы можете использовать библиотеку Apache commons-collections:
List<String> newList = ListUtils.union(list1, list2);