JAVA: неизменный набор в виде списка

В настоящее время мне возвращают ImmutableSet из вызова функции (getFeatures()), и из-за структуры остальной части моего кода, которая будет выполняться позже, было бы намного проще изменить это на List. Я попытался разыграть его, который выдает исключение во время выполнения. Я также искал вызов функции для преобразования его в список безрезультатно. Есть ли способ сделать это? Моя последняя [неудачная] попытка показана ниже:

ImmutableSet<FeatureWrapper> wrappersSet =  getFeatures();
List<FeatureWrapper> wrappers = (List<FeatureWrapper>) wrappersSet;

Я нашел wrapperSet.asList(), который даст мне ImmutableList, однако я бы предпочел изменяемый список

3 ответа

Решение

Вы не можете разыграть Set<T> в List<T>, Это совершенно разные объекты. Просто используйте этот конструкторкопирования, который создает новый список из коллекции:

List<FeatureWrapper> wrappers = new ArrayList<>(wrappersSet);

ImmutableCollection имеет функцию " asList"...

ImmutableList<FeatureWrapper> wrappersSet = getFeatures().asList();

Бонусные баллы, что возвращаемый тип ImmutableList,

Если вы действительно хотели изменчивый List хотя, тогда ответ Вивин, что вы хотите.

Поскольку Guava-21 опоры java-8 ты можешь использовать stream а также collector преобразовать ImmutableSet к List:

ImmutableSet<Integer> intSet = ImmutableSet.of(1,2,3,4,5);
// using java-8 Collectors.toList()
List<Integer> integerList = intSet.stream().collect(Collectors.toList());
System.out.println(integerList); // [1,2,3,4,5]
integerList.removeIf(x -> x % 2 == 0); 
System.out.println(integerList); // [1,3,5] It is a list, we can add 
// and remove elements

Мы можем использовать ImmutableList#toImmutableList с коллекционерами, чтобы преобразовать ImmutableList к ImmutableList: // используя ImmutableList#toImmutableList()

ImmutableList<Integer> ints = intSet.stream().collect(
                                     ImmutableList.toImmutableList()
                              );
System.out.println(ints); // [1,2,3,4,5]

И самый простой способ это позвонить ImmutableSet#asList

// using ImmutableSet#asList
ImmutableList<Integer> ints = intSet.asList(); 
Другие вопросы по тегам