Как преобразовать "Sets.combination" Гуавы обратно в пригодный для использования тип объекта? - PullRequest
1 голос
/ 10 июля 2019

По сути, я получаю все 10 уникальных комбинаций моих героев с помощью метода Guavas Sets.combination. Мой вход - это список экземпляров / объектов героя. Выход в моем наборе, кажется, java.lang.Object или объект javas, расширяющий набор Guava.Sets.

Как мне снова преобразовать эти подмножества объектов в массивы или списки, содержащие объекты моего героя?

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 Ответ

1 голос
/ 10 июля 2019

Вы получаете набор из метода комбинации.Поэтому используйте соответствующие шаблоны:

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>, на самом деле)!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...