如何从列表的Hashsets中获取项目?

时间:2018-04-26 20:25:12

标签: java jgrapht

我正在使用 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以及之前使它们成为整数。 我尝试了很多方法,但我无法解决问题。

1 个答案:

答案 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;
}