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));
}