4

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

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

我发现 wrapperSet.asList() 会给我一个 ImmutableList 但是我更喜欢一个可变列表

4

3 回答 3

10

您不能将 aSet<T>转换为List<T>. 它们是完全不同的对象。只需使用这个从集合中创建一个新列表的复制构造函数:

List<FeatureWrapper> wrappers = new ArrayList<>(wrappersSet);
于 2015-06-10T15:57:40.773 回答
5

ImmutableCollection具有“ asList ”功能...

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

返回类型 an 的奖励积分ImmutableList

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

于 2016-09-26T08:14:39.147 回答
0

由于Guava-21支持java-8,您可以使用streamandcollector将 an 转换ImmutableSet为 a 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收集器将 an 转换ImmutableListImmutableList: // 使用 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(); 
于 2017-03-09T21:37:13.253 回答