java比较器,用于按浮点参数对对象arraylist排序
如何创建一个比较器,以便能够通过浮点参数对arraylist进行排序
假设我有一个对象的arraylist,它有如下内容:
ID=7 TFIDF=0.12654299 PR=25238.0
ID=4 TFIDF=0.12654299 PR=3638.0
ID=4 TFIDF=0.12654299 PR=3638.0
ID=4 TFIDF=0.12654299 PR=3638.0
ID=3 TFIDF=0.56442446 PR=14558.0
ID=1 TFIDF=0.0083091585 PR=3953.0
我想按TFIDF值对数组进行排序。。据我所知,我只能按整数排序。。因此,我比较零
到目前为止,我有:
Collections.sort(Contents_To_Show, new Comparator<ContentToShow>() {
public int compare(ContentToShow o1, ContentToShow o2) {
return (int) (o1.GetPR() - o2.GetPR());
}
});
但是。同样,它只比较整数部分。如何比较整个值
请帮忙
谢谢
# 1 楼答案
在使用lambda函数的Java8中,现在比较对象列表中的两个浮点值非常简单。在这个例子中,我使用了lambda函数和函数操作(Java8中的新特性)。大体上你可以试试这个例子。本例通过代表高度的浮标来安排人员:
这是我班的人
输出为:
第二
管理员
首先
所以我认为这个例子更容易理解Java8的特性。在文档中,您尝试了一个类似的示例,但字符串使用了另一种方法。(Oracle official documentation to lambda functions with Collection example)
# 2 楼答案
佩德罗的后续行动。如果要按TFIDF排序,则按PR排序
# 3 楼答案
好的,从您的评论来看,您的问题是,您正在对比较器使用减法代码,但是由于浮点值差小于
1
(绝对值),所以强制转换到int
总是舍入到0
使用更通用的形式,使用
if
正如我所说,如何获得
compare
结果值(只要是一致的)与排序无关# 4 楼答案
那你为什么要比较
PR
值和o1.GetPR()
尝试在比较方法中比较
TFIDF
值(但如上所述,强制转换为int将始终四舍五入为int值,即0)所以你可以用