Есть ли простой способ конвертировать Set<Integer>
в Set<String>
без повторения всего набора?
Преобразование Set <Integer> для установки <String> в Java
Ответ 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
Вы можете использовать декоратор, если вы действительно не хотите перебирать весь набор
Ответ 5
Вы можете использовать коллекцию Commons TransformedSet или Guava Collections2. преобразование (...)
В обоих случаях ваш функтор предположительно просто вызовет Integer toString().
Ответ 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()))