以下代码创建了一个排序集,它按其值而不是键进行排序。 vertexRank
是一个对象,负责获取值。一切正常,除了代码:vertexCentralities.addAll(vMap.entrySet());
发生的情况是只有来自 vMap 的第一个条目被添加到 vertexCentralities 而不是所有条目。
如何从 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)
编辑:
我尝试使用 String
和 double
的重复值:
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/