Java: общий список для установки преобразования и наоборот

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

Ответ 1

Как List.addAll и Set.addAll?

Ответ 2

В большинстве классов java collection framework есть конструктор, который принимает набор элементов в качестве параметра. Вы должны использовать свою предпочтительную реализацию ton для преобразования 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);
    }
}

Ответ 3

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

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

// 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;
        }
    }
}