Преобразование Set <Integer> для установки <String> в Java

Есть ли простой способ конвертировать Set<Integer> в Set<String> без повторения всего набора?

Ответ 1

Нет. Вы должны отформатировать каждое целое число и добавить его в свой набор строк.

Ответ 2

Нет. Лучший способ - это цикл.

HashSet<String> strs = new HashSet<String>(ints.size());
for(Integer integer : ints)
    strs.add(integer.toString());

Что-то простое и относительно быстрое, что является простым и выразительным, вероятно, лучше всего.

(Обновление:) В Java 8 то же самое можно сделать с помощью выражения лямбда, если вы хотите скрыть цикл.

HashSet<String> strs = new HashSet<>(ints.size());
ints.forEach(i -> strs.add(i.toString()));

Ответ 3

использовать карту потока Java8 и собирать способности:

Установить <String> stringSet =  intSet.stream(). map (e → String.valueOf(e)). collect (Collectors.toSet());

Ответ 4

Вы можете использовать декоратор, если вы действительно не хотите перебирать весь набор

Ответ 6

AFAIK, вам нужно перебирать коллекцию; особенно когда речь идет о конверсии, которая не является естественной. т.е. если вы пытались конвертировать из Set-Timestamp- в Set-Date-; вы можете добиться этого, используя некоторую комбинацию Java Generics (так как Timestamp можно отнести к Date). Но поскольку Integer не может быть передан в String, вам нужно будет итерации.

Ответ 7

Вы можете реализовать Set<String> самостоятельно и перенаправить все вызовы на исходный набор, соблюдая необходимые преобразования только тогда, когда это необходимо. В зависимости от того, как используется набор, который может работать значительно лучше или значительно хуже.

Ответ 8

Использование Коллекции Eclipse с Java 8:

Set<String> strings = IntSets.mutable.with(1, 2, 3).collect(String::valueOf);

Это не требует боксирования значений int и Integer, но вы также можете сделать это, если необходимо:

Set<String> strings = Sets.mutable.with(1, 2, 3).collect(String::valueOf);

Sets.mutable.with(1, 2, 3) вернет MutableSet<Integer>, в отличие от IntSets.mutable.with(1, 2, 3), который вернет MutableIntSet.

Примечание. Я являюсь коммиттером для коллекций Eclipse.

Ответ 9

private static <T> Set<T> toSet(Set<?> set) {
    Set<T> setOfType = new HashSet<>(set.size());
    set.forEach(ele -> {
        setOfType.add((T) ele);
    });
    return setOfType;
 }

Ответ 10

Java 7 + Guava (предположительно, нет возможности переключиться на Java 8).

new HashSet<>(Collections2.transform(<your set of Integers>, Functions.toStringFunction()))