Java SortedSet 添加所有

标签 java set sortedset

以下代码创建了一个排序集,它按其值而不是键进行排序。 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/

相关文章:

java - 比较 Set 中项目的 Mockito 匹配器,而不是 Set 引用本身

java - 如何迭代 SortedSet 以修改其中的项目

在android中解压时发生java.io.FileNotFoundException

java - 在哪些平台上没有jvm,或者与windows或linux相比功能有限的jvm

java - 尽管没有更改,禁用电池优化的权限仍然出现在 Android API 28 上

java - 不区分大小写的排序集 - 保留相同的字符串但大小写不同

java - 如何通过ajax jquery设置di​​v标签的属性值

c++ - 如何填充和返回集合 vector 的 vector

linked-list - Redis 数据结构空间要求

c# - 使用什么算法来检查一组是否与另一组重叠?