如何将 Guava 的 "Sets.combinations" returns 转换回可用的对象类型?
How to cast Guava's "Sets.combinations" returns back to usable Object Type?
基本上,我用 Guavas Sets.combinations 方法得到了我英雄的所有独特的 10 种组合。
我的输入是英雄列表 instances/objects。我的 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
投射错误信息:
Exception in thread "main" java.lang.ClassCastException: com.google.common.collect.Sets 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();
但是我从这里去哪里呢?
组合法获得一组。所以使用合适的泛型:
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>
)!
基本上,我用 Guavas Sets.combinations 方法得到了我英雄的所有独特的 10 种组合。 我的输入是英雄列表 instances/objects。我的 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
投射错误信息:
Exception in thread "main" java.lang.ClassCastException: com.google.common.collect.Sets 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();
但是我从这里去哪里呢?
组合法获得一组。所以使用合适的泛型:
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>
)!