Преобразовать Set <Integer>в Set <String>в Java - PullRequest
13 голосов
/ 10 мая 2011

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

Ответы [ 10 ]

9 голосов
/ 10 мая 2011

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

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()));
8 голосов
/ 09 октября 2016

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

 Set< String >  stringSet = 
   intSet.stream().map(e -> String.valueOf(e)).collect(Collectors.toSet());
6 голосов
/ 10 мая 2011

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

2 голосов
/ 10 мая 2011

Вы можете использовать '1001 * TransformedSet Commons Collections или Collections2.transform (...)

от Guava *. В обоих случаях ваш функтор предположительно просто вызовет IntegerToString ().

2 голосов
/ 10 мая 2011

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

1 голос
/ 23 июня 2017

Использование Коллекции 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.

1 голос
/ 10 мая 2011

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

1 голос
/ 10 мая 2011

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

0 голосов
/ 03 ноября 2016

Java 7 + Guava (предположительно, нет способа перейти на Java 8).

new HashSet<>(Collections2.transform(<your set of Integers>, Functions.toStringFunction()))
0 голосов
/ 28 сентября 2016
private static <T> Set<T> toSet(Set<?> set) {
    Set<T> setOfType = new HashSet<>(set.size());
    set.forEach(ele -> {
        setOfType.add((T) ele);
    });
    return setOfType;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...