JAVA:ImmutableSet作为List

时间:2015-06-10 15:56:27

标签: java list immutable-collections

我目前从函数调用(getFeatures())返回一个ImmutableSet,并且由于我稍后要执行的其余代码的结构 - 将其更改为List会更容易。我试图将其转换为产生运行时异常。我也四处寻找函数调用将其转换为列表无济于事。有没有办法做到这一点?我最近的[失败]尝试如下所示:

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

我找到了wrapperSet.asList(),它会给我一个ImmutableList但是我更喜欢一个可变列表

3 个答案:

答案 0 :(得分:8)

您无法将Set<T>投射到List<T>。它们是完全不同的对象。只需使用此copy constructor即可从集合中创建新列表:

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

答案 1 :(得分:4)

ImmutableCollection具有“asList”功能......

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

奖励指出返回的类型为ImmutableList

如果你真的想要一个可变的List,那么Vivin's回答就是你想要的。

答案 2 :(得分:0)

由于Guava-21支持java-8,您可以使用streamcollectorImmutableSet转换为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();