我正在使用 ConnectivityInspector 使用connectedSets()方法从图表中获取连接的树,这会给我一个Hashsets列表
ConnectivityInspector s = new ConnectivityInspector<>(graph);
System.out.println(s.connectedSets());
它会给我森林里所有的树木
例如
[[13,14],[15],[16,17,18,19,20,21,22],[23],[36],[38,39],[40],[41],[ 52],[56,120],[58,122,186]]
我现在的问题是,我坚持认为如何获得每棵树的总和以获得这棵树的平均值。 例如:s.connectedSets()。get(0)= [13,14]。 如何添加13和14以及之前使它们成为整数。 我尝试了很多方法,但我无法解决问题。
答案 0 :(得分:0)
首先,我建议进入更多细节......即。代码片段,对您尝试做的事情有更全面的解释等。
其次,根据我的理解,你有一个ConnectivityInspector
的实例,你想得到每棵树的总和,然后找到树的平均值。查看文档,我们可以看到connectedSets()
返回类型List<Set<V>>
。现在,我假设您的V=int or Integer
您可以在漂亮的Java 8中使用Stream来对列表中的每个集合求和,然后将每个总和存储在List中。列表中索引i处的值sums是connSets中索引i处的树的总和。然后我们可以再次使用sum
来查找总和列表的总和,然后将其除以所有集合列表中的元素数量。
public int calculateAverage(List<Set<Integer>> connSets) {
List<Integer> sums = new ArrayList<Integer>();
int elementCount = 0;
for(int i = 0; i < connSets.size(); i++) {
elementCount += connSets.get(i).size();
sums.add(i, connSets.get(i).stream().mapToInt(Integer::intValue).sum());
}
return sums.stream().mapToInt(Integer::intValue).sum()/elementCount;
}