Другие уже объяснили, почему узнающие больше языки делают Вас лучшим программистом.
Что касается убеждения Вашего босса это стоит того, это - вероятно, просто культура Вашей компании. Некоторые места делают карьеру, и навык прогрессировать политика (переместитесь вверх или), некоторые места оценивают его, но оставляют его до инициативы сотрудника, и некоторые места очень фокусируются на нижней строке.
, Если необходимо объяснить, почему изучение языка является хорошей вещью боссу, мой совет состоял бы в том, чтобы остаться в работе только настолько же долго по мере необходимости, затем пойти домой и изучить новые вещи самостоятельно.
] Как всегда, для любых коллекций, смотрите google-collections . Если у вас есть Set
, в частности (а не просто общая коллекция), вам нужно:
Set<String> combined = Sets.union(foo, bar);
, который создает неизменяемое представление двух наборов. То есть, изменения в foo
или bar
будут отражены в комбинированном
(но комбинированный.add ()
и т. д. не поддерживается).
В более общем случае у вас есть Iterables.concat ()
, но это просто позволяет выполнять итерацию по объединенному элементу, интерфейс Iterable
явно не включает содержит
], так что вы немного запутались.
Другие классы утилит коллекций в google-collections ( com.google.common.collect.Lists
и com.google.common.collect. Collections2
) не содержат методов конкатенации. Не понимаю, почему они не могли, но в данный момент они этого не делают.
Для более общего случая у вас есть Iterables.concat ()
, но это просто позволяет вам выполнять итерацию по объединенному элементу, интерфейс Iterable
, очевидно, не включает содержит
, так что вы немного запутались.
Другие классы утилит коллекций в google-collections ( com.google.common.collect.Lists
и com.google.common .collect.Collections2
) не содержат методов конкатенации. Не понимаю, почему они не могли, но в данный момент они этого не делают.
Для более общего случая у вас есть Iterables.concat ()
, но это просто позволяет вам выполнять итерацию по объединенному элементу, интерфейс Iterable
, очевидно, не включает содержит
, так что вы немного запутались.
Другие классы утилит коллекций в google-collections ( com.google.common.collect.Lists
и com.google.common .collect.Collections2
) не содержат методов конкатенации. Не понимаю, почему они не могли, но в данный момент они этого не делают.
Другие классы утилит коллекций в google-коллекциях ( com.google.common.collect.Lists
и com.google.common.collect.Collections2
) не содержат методы конкатенации. Не понимаю, почему они не могли, но в данный момент они этого не делают.
Другие классы утилит коллекций в google-коллекциях ( com.google.common.collect.Lists
и com.google.common.collect.Collections2
) не содержат методы конкатенации. Не понимаю, почему они не могли, но в данный момент они этого не делают.
Ваш вопрос очень расплывчатый. В частности «с другим элементом другая коллекция» совершенно неясно.
Вы можете по крайней мере добавить содержимое другой коллекции
в текущую коллекцию
, используя Коллекция # addAll ()
. Здесь Коллекция
может быть любым из своих подынтерфейсов / реализаций, например List
или Set
.
Пример:
List<String> foos = Arrays.asList("foo1", "foo2", "foo3");
List<String> bars = Arrays.asList("bar1", "bar2", "bar3");
foos.addAll(bars); // Now foos contains everything.
Edit : Или вы действительно хотите создать новую Коллекцию
на основе существующей Коллекции
, а затем добавить в нее новый элемент? В этом случае просто создайте новую коллекцию
с существующей коллекцией
в качестве аргумента конструктора. Например:
List<String> foos = Arrays.asList("foo1", "foo2", "foo3");
List<String> bars = new ArrayList<String>(foos);
bars.add("bar"); // Now bars contains everything.
Я думаю, что вы просите о конструкции Java, которая позволяет вам объединять коллекции без изменения исходных коллекций. Другими словами, у вас есть коллекции A и B, размер N и M соответственно. После вызова concat у вас все еще есть коллекции A и B, и их размеры по-прежнему равны N и M, однако у вас также есть коллекция C, которая указывает на A и B, что делает ее размер N + M.
Ответ отрицательный, В Java нет ничего готового, что бы это делало ... Однако вы могли бы написать быструю оболочку, которая обертывает серию коллекций и добавляет в нее эти коллекции. (Все, что он будет делать, это поддерживать ссылки на каждую из коллекций), и вы можете предоставлять методы get / insert по мере необходимости.
Я не понимаю, о чем вы спрашиваете. Моя интерпретация вашего вопроса заключается в том, что вы ищете метод добавления в Collection. Я не думаю, что вы об этом спрашиваете.
Нет, но написать это самому должно быть проще
package ch.akuhn.util;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class Concat {
public static <T> Iterable<T> all(final Iterable<T>... iterables) {
return new Iterable<T>() {
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
Iterator<Iterable<T>> more = Arrays.asList(iterables).iterator();
Iterator<T> current = more.hasNext() ? more.next().iterator() : null;
@Override
public boolean hasNext() {
if (current == null) return false;
if (current.hasNext()) return true;
current = more.hasNext() ? more.next().iterator() : null;
return this.hasNext();
}
@Override
public T next() {
if (!hasNext()) throw new NoSuchElementException();
return current.next();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
};
}
}
А затем
for (Object each: Concat.all(collection,whatever,etcetera,...)) {
// ...
}
Просто написал здесь этот код, компилируйте на свой страх и риск!
PS, если вы собираетесь писать модульные тесты для этого класса, пришлите их мне.
Попробуйте InterleavingEnumeration или apache's commons collections' ListUtils (ListUtils.union())