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);
Поскольку 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();