Java 如何将排序后的值与值附带的名称合并在一起?

Java 如何将排序后的值与值附带的名称合并在一起?,java,Java,如何使文本文件与排序更频繁的相似性分数合并?从另一个意义上讲,即使在排序之后,输出也会显示每个单独的文本文件,并跟随它们各自的分数 听起来最简单(或最直接)的方法是使用集合和比较器 The resulting similarity score of the query how [INITIAL OUTPUT] abc0.txt = 0.5773502691896258 abc1.txt = 0.5773502691896258 abc2.txt = 0.5773502691896258

如何使文本文件与排序更频繁的相似性分数合并?从另一个意义上讲,即使在排序之后,输出也会显示每个单独的文本文件,并跟随它们各自的分数

听起来最简单(或最直接)的方法是使用集合和比较器

The resulting similarity score of the query how [INITIAL OUTPUT]

abc0.txt = 0.5773502691896258

abc1.txt = 0.5773502691896258

abc2.txt = 0.5773502691896258

abc3.txt = NaN

abc4.txt = 0.5773502691896258

abc5.txt = NaN

abc6.txt = NaN

abc7.txt = NaN

abc8.txt = NaN

abc9.txt = 0.5773502691896258

abc10.txt = NaN

Similarity score sorted **DESIRED** output :


0.5773502691896258   abc0.txt

0.5773502691896258   abc1.txt

0.5773502691896258   abc2.txt

0.5773502691896258   abc4.txt

0.5773502691896258   abc9.txt

NaN                  abc3.txt

NaN                  abc5.txt

NaN                  abc6.txt

NaN                  abc7.txt

NaN                  abc8.txt

NaN                  abc10.txt
将值放入映射中,然后按双精度排序。这甚至可能是自然排序顺序,因此您不必编写比较器

The resulting similarity score of the query how [INITIAL OUTPUT]

abc0.txt = 0.5773502691896258

abc1.txt = 0.5773502691896258

abc2.txt = 0.5773502691896258

abc3.txt = NaN

abc4.txt = 0.5773502691896258

abc5.txt = NaN

abc6.txt = NaN

abc7.txt = NaN

abc8.txt = NaN

abc9.txt = 0.5773502691896258

abc10.txt = NaN

Similarity score sorted **DESIRED** output :


0.5773502691896258   abc0.txt

0.5773502691896258   abc1.txt

0.5773502691896258   abc2.txt

0.5773502691896258   abc4.txt

0.5773502691896258   abc9.txt

NaN                  abc3.txt

NaN                  abc5.txt

NaN                  abc6.txt

NaN                  abc7.txt

NaN                  abc8.txt

NaN                  abc10.txt
Map m=newhashmap();
字符串pre=“abc”;
字符串post=“.txt”;
对于(int ii=0;ii<10;ii++){
m、 put(Math.random(),pre+ii+post);
}
SortedSet set=新树集(m.keySet());
用于(双d:套){
System.out.println(d+“”+m.get(d));
}
这将返回排序后的输出(从低到高),您可以轻松地将其反转或以不同的方式运行

--编辑以使用OP的修改代码显示:

Map<Double,String> m = new HashMap<Double,String>();

String pre = "abc";
String post = ".txt";
for (int ii = 0; ii < 10; ii++) {
    m.put(Math.random(),pre + ii + post);
}
SortedSet<Double> set = new TreeSet<Double>(m.keySet());
for (Double d : set) {
    System.out.println(d + " " + m.get(d));
}
//初始化变量
字符串pre=“abc”;
字符串post=“.txt”;
Map m=新的HashMap();
//向地图添加数据
对于(int a=0;a=0;--ii){
System.out.println(set.get(ii)+“”+m.get(d));
}

这只是一个旁白,但假设
\u resultArea
是一个
StringBuilder
,使用
\u resultArea.append(someStr+somesotherstr)
是愚蠢的。编译器将创建一个新的StringBuilder,只是为了将
someStr
附加到
someOtherStr
。您最好执行
\u resultArea.append(someStr).append(someOtherStr)耶生成器模式!!:-Dhi,我根据你的建议编辑了我的程序,但它似乎没有排序我的价值。你能指出我的错误吗?谢谢。您的for循环嵌套不正确。如果要在顶部循环文件,则不需要在内部循环文件。在第一个内部for循环中,您实际上多次将相同的“分数”添加到哈希中。在第二个内部for循环中,您只对映射中已经存在的值进行排序。最糟糕的是,您正在创建映射/内部/for循环。。。因此,您要创建一个映射,多次向其中添加一个值(在映射中只会添加一个值),对一个值进行排序,然后打印一个值。然后一次又一次地做。
// Initialize variables
String pre = "abc";
String post = ".txt";
Map<Double,String> m = new HashMap<Double,String>();

// Add data to your map
for (int a = 0; a < filename; a++) {
   m.put(similarityScore[a],pre + a + post + '\n');
}

// sort the map keyset and print out the sorted results
SortedSet<Double> set = new TreeSet<Double>(m.keySet());
for (int ii = set.size(); ii >= 0; --ii) {
   System.out.println(set.get(ii) + " " + m.get(d));
}