Java: общий список для установки конверсии и наоборот - PullRequest
11 голосов
/ 16 марта 2011

Мне нужна Java-функция, которая преобразует из java.util.List в java.util.Set и наоборот, независимо от типа объектов в List/Set.

Ответы [ 4 ]

23 голосов
/ 16 марта 2011

Как List.addAll и Set.addAll?

7 голосов
/ 16 марта 2011

Большинство классов фреймворка java collection имеют конструктор, который принимает коллекцию элемента в качестве параметра. Вы должны использовать предпочитаемую реализацию для преобразования exameple (с HashSet и ArrayList):

public class MyCollecUtils {

    public static <E> Set<E> toSet(List<E> l) {
        return new HashSet<E>(l);
    }

    public static <E> List<E> toSet(Set<E> s) {
        return new ArrayList<E>(s);
    }
}
6 голосов
/ 16 марта 2011
public static <E> Set<E> getSetForList(List<E> lst){
  return new HashSet<E>(lst);//assuming you don't care for duplicate entry scenario :)
}

public static <E> List<E> getListForSet(Set<E> set){
  return new ArrayList<E>(set);// You can select any implementation of List depending on your scenario
}
4 голосов
/ 16 марта 2011

Вместо одной функции вы можете иметь две функции для реализации этой функции:

// Set to List
public List setToList(Set set) {
    return new ArrayList(set);
}

// List to Set
public Set listToSet(List list) {
    return new HashSet(list);
}

В одной функции:

public Collection convertSetList(Collection obj) {
    if (obj instanceof java.util.List) {
         return new HashSet((List)obj);
    } else if(obj instanceof java.util.Set) {
         return new ArrayList((Set)obj);
    }    
    return null;
}

Пример: (обновлено)

public class Main {
    public static void main(String[] args) {
        Set s = new HashSet();
        List l = new ArrayList();

        s.add("1");s.add("2");s.add("3");
        l.add("a");l.add("b");l.add("c");

        Collection c1 = convertSetList(s);
        Collection c2 = convertSetList(l);

        System.out.println("c1 type is : "+ c1.getClass());
        System.out.println("c2 type is : "+ c2.getClass());        
    }

    public static Collection convertSetList(Collection obj) {
        if (obj instanceof java.util.List) {
            System.out.println("List!");
            return (Set)new HashSet((List) obj);
        } else if (obj instanceof java.util.Set) {
            System.out.println("Set!");
            return (List)new ArrayList((Set) obj);
        } else {
            System.out.println("Unknow type!");
            return null;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...