Набор, который представляет конкатенацию двух наборов в Java

Другие уже объяснили, почему узнающие больше языки делают Вас лучшим программистом.

Что касается убеждения Вашего босса это стоит того, это - вероятно, просто культура Вашей компании. Некоторые места делают карьеру, и навык прогрессировать политика (переместитесь вверх или), некоторые места оценивают его, но оставляют его до инициативы сотрудника, и некоторые места очень фокусируются на нижней строке.

, Если необходимо объяснить, почему изучение языка является хорошей вещью боссу, мой совет состоял бы в том, чтобы остаться в работе только настолько же долго по мере необходимости, затем пойти домой и изучить новые вещи самостоятельно.

5
задан 3 revs 15 November 2009 в 17:32
поделиться

6 ответов

] Как всегда, для любых коллекций, смотрите 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 ) не содержат методы конкатенации. Не понимаю, почему они не могли, но в данный момент они этого не делают.

9
ответ дан 18 December 2019 в 07:55
поделиться

Ваш вопрос очень расплывчатый. В частности «с другим элементом другая коллекция» совершенно неясно.

Вы можете по крайней мере добавить содержимое другой коллекции в текущую коллекцию , используя Коллекция # 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.
4
ответ дан 18 December 2019 в 07:55
поделиться

Я думаю, что вы просите о конструкции Java, которая позволяет вам объединять коллекции без изменения исходных коллекций. Другими словами, у вас есть коллекции A и B, размер N и M соответственно. После вызова concat у вас все еще есть коллекции A и B, и их размеры по-прежнему равны N и M, однако у вас также есть коллекция C, которая указывает на A и B, что делает ее размер N + M.

Ответ отрицательный, В Java нет ничего готового, что бы это делало ... Однако вы могли бы написать быструю оболочку, которая обертывает серию коллекций и добавляет в нее эти коллекции. (Все, что он будет делать, это поддерживать ссылки на каждую из коллекций), и вы можете предоставлять методы get / insert по мере необходимости.

2
ответ дан 18 December 2019 в 07:55
поделиться

Я не понимаю, о чем вы спрашиваете. Моя интерпретация вашего вопроса заключается в том, что вы ищете метод добавления в Collection. Я не думаю, что вы об этом спрашиваете.

0
ответ дан 18 December 2019 в 07:55
поделиться

Нет, но написать это самому должно быть проще

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, если вы собираетесь писать модульные тесты для этого класса, пришлите их мне.

3
ответ дан 18 December 2019 в 07:55
поделиться

Попробуйте InterleavingEnumeration или apache's commons collections' ListUtils (ListUtils.union())

0
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

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