gpt4 book ai didi

Java SortedSet 添加所有

转载 作者:行者123 更新时间:2023-11-29 03:39:43 27 4
gpt4 key购买 nike

以下代码创建了一个排序集,它按其值而不是键进行排序。 vertexRank 是一个对象,负责获取值。一切正常,除了代码:vertexCentralities.addAll(vMap.entrySet()); 发生的情况是只有来自 vMap 的第一个条目被添加到 vertexCentralities 而不是所有条目。

  1. 如何从 vMap 获取所有条目到 vertexCentralities?

    SortedSet<Map.Entry<String, Double>> vertexCentralities = 
    new TreeSet<Map.Entry<String, Double>>(
    new Comparator<Map.Entry<String, Double>>()
    {
    @Override
    public int compare(Map.Entry<String, Double> e1, Map.Entry<String, Double> e2)
    {
    return e2.getValue().compareTo(e1.getValue());
    }
    });
    SortedMap<String, Double> vMap = new TreeMap<String, Double>();
    double curRank = 0;
    for(String vStr: g.getVertices())
    {
    curRank = vertexRank.getVertexScore(vStr);
    vMap.put(vStr, curRank);
    }

    vertexCentralities.addAll(vMap.entrySet());

最佳答案

我试过运行:

public static final void main(final String[] args) {
final String[] vStrs = new String[] { "A", "Z", "E", "R", "T", "Y" }; // init

final SortedSet<Map.Entry<String, Double>> vertexCentralities = new TreeSet<Map.Entry<String, Double>>(new Comparator<Map.Entry<String, Double>>() {
@Override
public int compare(final Map.Entry<String, Double> e1, final Map.Entry<String, Double> e2) {
return e2.getValue().compareTo(e1.getValue());
}
});
final SortedMap<String, Double> vMap = new TreeMap<String, Double>();
double curRank = 0;
for (final String vStr : vStrs) {
curRank = new Random().nextDouble() * 100.0; // replacing
// vertexRank.getVertexScore(vStr);
// for testing
vMap.put(vStr, curRank);
}
vertexCentralities.addAll(vMap.entrySet());

for (final Map.Entry<String, Double> entry : vertexCentralities) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}

}

并且输出按值排序:

A: 70.50008784770233
Z: 55.48252329485239
E: 37.31308600830347
Y: 32.534528844628255
T: 16.544965680467794
R: 12.258316023552872

也许您的问题来自其他地方...例如 g.getVertices()vertexRank.getVertexScore(vStr)

编辑:我尝试使用 Stringdouble 的重复值:

final String[] vStrs = new String[] { "A", "Z", "E", "R", "T", "Y", "A" };
curRank = new Random().nextInt(3);

而且看起来不允许重复。这是你的问题吗?

编辑:如果您想允许使用相同的 Double 进行多次输入,请找到一个解决方案:将您的 SortedSet vertexCentralities 的比较器条件替换为:

final int bValue = e2.getValue().compareTo(e1.getValue());
return bValue != 0 ? bValue : e2.getKey().compareTo(e1.getKey());

关于Java SortedSet 添加所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739563/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com