如何将番石榴的“ Sets.combinations”转换为可用的对象类型?

时间:2019-07-10 08:59:18

标签: java casting guava

基本上,我使用Guavas Sets.combinations方法获得了英雄的所有唯一10种组合。 我的输入是英雄实例/对象的列表。我的Set中的输出似乎是 java.lang.Object或Guava.Sets扩展javas对象。

我如何将这些对象子集再次转换为包含英雄对象的数组或列表?

private void createHeroCombinations(){
        Set combinations = Sets.combinations(ImmutableSet.copyOf(heroList),10);
        this.combinationList = combinations;

        System.out.println(combinations.size());

        Iterator iterator = this.combinationList.iterator();

        System.out.println(iterator.next().toString());
        System.out.println(iterator.next().getClass());
        Hero[] heroArray = (Hero[]) iterator.next();
    }

soutp的输出:

2147483647
[Hero@4617c264, Hero@5ca881b5, Hero@24d46ca6, Hero@4517d9a3, Hero@372f7a8d, Hero@5305068a, Hero@1f32e575, Hero@279f2327, Hero@2ff4acd0, Hero@54bedef2]
class com.google.common.collect.Sets$5$1$1

投放错误消息:

Exception in thread "main" java.lang.ClassCastException: com.google.common.collect.Sets$5$1$1 cannot be cast to [LHero;
    at MetaCalculator.createHeroCombinations(MetaCalculator.java:208)
    at MetaCalculator.<init>(MetaCalculator.java:36)
    at MetaCalculator.main(MetaCalculator.java:14)

我所能做的就是将其作为java.lang.object:

Object o = iterator.next();

但是我从这里去哪里?

1 个答案:

答案 0 :(得分:1)

您可以从组合方法中获得一组集合。因此,请使用适当的泛型:

Set<Set<Hero>> combos = Sets.combination(ImmutableSet.copyOf(heroes),10);

然后使用以下迭代器:

Iterator<Set<Hero>> comboIterator = combos.iterator();
Set<Hero> comboOne = comboIterator.next();
for(Hero hero:comboOne) {
  // Do something with hero
}

请注意,尽管使用了[...]表示法,但您没有得到数组(Hero[]),而是得到了Collection<Hero>(实际上是Set<Hero>)!