representados - multiplicacion de conjuntos en java
Agregar elementos a un conjunto en la creación (7)
¿Cómo puedo crear un conjunto en java y luego agregarle objetos cuando está construido? Quiero hacer algo como:
testCollision(getObject(), new HashSet<MazeState>(){add(thing);});
Pero eso no parece del todo correcto.
Desde Java 7 , para crear una instancia de un conjunto inmutable de un solo elemento , puede utilizar:
Collections.singleton(thing);
Devuelve un conjunto inmutable que contiene solo el objeto especificado. El conjunto devuelto es serializable.
En Java 8 , puede crear una instancia de un Conjunto que contenga cualquier número de sus objetos con lo siguiente, que es una adaptación de esta respuesta :
Stream.of(thing, thingToo).collect(Collectors.toSet());
Desde Java 9 también puedes hacerlo así:
Set<String> immutableSet = Set.of("value1", "value2");
Set<Integer> immutableInt = Set.of(1, 2);
List<String> immutableList = List.of("item1", "item2");
Map<String, String> immutableMap = Map.of("key1", "value1", "key2", "value2", "key3", "value3");
Observe que todos los Conjuntos / Mapas / Listas creados de esta manera serán inmutables (si mi convención de nombres no lo convenció;)
En java 5
new HashSet<MazeState>(Arrays.asList(thing));
Arrays.asList(thing)
convierte tu thing
en la lista de un elemento, y de ese conjunto de listas se crea.
Para la referencia:
http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T...)
Otras respuestas son correctas, pero desea agregar una forma más utilizando el bloque de inicialización
new HashSet<MazeState>() {
{
add(new MazeState());
add(new MazeState());
}
};
Puede usar el método util de com.google.common.collect
, que es bastante bueno: Sets.newHashSet("your value1", "your valuse2");
Puedes usar llaves dobles:
testCollision(getObject(), new HashSet<MazeState>(){{ add(obj1); add(obj2);}};
o:
Set<String> set = new HashSet<String>(){{
add("hello");
add("goodbye");
}};
Esto se denomina inicialización de doble refuerzo y es una de las características menos conocidas de Java. Lo que hace es hacer que el compilador cree una clase interna anónima que haga la creación y la manipulación por usted (por ejemplo, si su clase fue definitiva, no podría usarla).
Ahora, una vez dicho esto, te animo a que lo uses solo en los casos en que realmente necesites la brevedad. Casi siempre es mejor ser más explícito, de modo que sea más fácil entender su código.
Si no le importa la inmutabilidad, puede utilizar la clase ImmutableSet
Google Guava :
ImmutableSet.of(new MazeState(), new MazeState());