我目前从函数调用(getFeatures())返回一个ImmutableSet,并且由于我稍后要执行的其余代码的结构 - 将其更改为List会更容易。我试图将其转换为产生运行时异常。我也四处寻找函数调用将其转换为列表无济于事。有没有办法做到这一点?我最近的[失败]尝试如下所示:
ImmutableSet<FeatureWrapper> wrappersSet = getFeatures();
List<FeatureWrapper> wrappers = (List<FeatureWrapper>) wrappersSet;
我找到了wrapperSet.asList(),它会给我一个ImmutableList但是我更喜欢一个可变列表
答案 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
,您可以使用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();