2011-05-10 8 views

Respuesta

6

No. Debe formatear cada número entero y agregarlo a su conjunto de cadenas.

2

Puede utilizar un decorador si realmente no quiere recorrer todo el conjunto

+0

¿Puedes dar un ejemplo? No estoy familiarizado con el concepto de decoradores. – CajunLuke

+0

¿Cómo aplicaría el patrón de decorador en este escenario? –

+1

Si solo quisiéramos un conjunto para que pareciera un conjunto pero no creáramos otro conjunto (digamos si solo una fracción del conjunto es probable que esté marcado) crearía una subclase de AbstractSet que envolvería el conjunto y lo haría las conversiones en métodos individuales. –

1

yo sepa, usted tiene que recorrer la colección; especialmente cuando hay una conversión implicada que no es natural. es decir, si estaba intentando convertir de Set-Timestamp a Set-Date; podrías lograr eso usando una combinación de Java Generics (ya que Timestamp se puede convertir a la fecha). Pero dado que Integer no se puede convertir a String, tendrá que iterar.

+0

¿Por qué la calificación -1? –

+0

Presumiblemente, alguien no estuvo de acuerdo con las respuestas "no" y siente que una envoltura/decorador es una mejor respuesta. –

+0

Gracias por la información –

7

No. La mejor manera es un ciclo.

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

Algo simple y relativamente rápido que es directo y expresivo es probablemente el mejor.

(Actualización :) En Java 8, se puede hacer lo mismo con una expresión lambda si desea ocultar el ciclo.

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

+1 para el ejemplo del código de limpieza. –

+0

Quizás quisiste decir 'toString' en lugar de' stringValue';) –

+0

@Peter Eso de hecho lo hice. Debo haber estado pensando en '.intValue()' de 'Integer'. – CajunLuke

1

Puede implementar Set<String> usted mismo y redirigir todas las llamadas al conjunto original, teniendo en cuenta las conversiones necesarias solo cuando sea necesario. Dependiendo de cómo se use el conjunto, podría funcionar significativamente mejor o significativamente peor.

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

mapa corriente de partida Java8 y recoger las habilidades:..

Establecer < String> stringSet = intSet.stream() Mapa (e -> String.valueOf (e)) recoger (Collectors.toSet());

0

Java 7 + Guava (presumiblemente no hay forma de cambiar a Java 8).

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

Usando Eclipse Collections con Java 8:

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

Esto no requiere el boxeo los valores int y Integer, pero se puede hacer eso también, si es necesario:

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

Sets.mutable.with(1, 2, 3) devolverá un MutableSet<Integer>, a diferencia de IntSets.mutable.with(1, 2, 3) que devolverá un MutableIntSet.

Nota: soy un committer para colecciones de Eclipse.

Cuestiones relacionadas