Tengo un conjunto y quiero convertirlo en mapa para usarlo más tarde en Maps.difference() de guayaba. Solo me importan las llaves en la diferencia.
Se me ocurrió esta versión:
private <T> Map<T, T> toMap(Set<T> set) { return set.stream().collect(Collectors.toMap(Function.identity(), Function.identity())); }Sin embargo, sé que, por lo general, un conjunto tiene un campo de respaldo de mapa. Este es el método que uso para crear el mapa:
public static <E> Set<E> newConcurrentHashSet() { return Collections.newSetFromMap(new ConcurrentHashMap<E, Boolean>()); }Dado que solo necesito las claves, pensé que tal vez podría obtener una vista de este campo de alguna manera. ¿alguna idea?
Terminé con una solución de una línea bastante sencilla con Java 8 de la siguiente manera:
Map<String, Foo> map = fooSet.stream().collect(Collectors.toMap(Foo::getKey, e -> e));Set<Foo> fooSetgetKey que devuelve una cadenaPuede convertir un Set en un Map (misma clave y valor tomados de elementos de Set ) como se muestra a continuación:
private <T> Map<T, T> toMap(Set<T> set) { Map<T, T> map = new ConcurrentHashMap<>(); set.forEach(t -> map.put(t, t));//contains same key and value pair return map; }Mejora de la respuesta del desarrollador :
Map<String, Foo> map = fooSet.stream().collect(Collectors.toMap(Foo::getKey, Function.identity())); o si importa estáticamente Collectors.toMap y Function.identity :
Map<String, Foo> map = fooSet.stream().collect(toMap(Foo::getKey, identity()));