一个搜索列表的接口,要求列表展示出来:优先展示字数最少的,字数相同的情况下,按引用次数排序,引用次数相同的情况下,按字母排序,这个我看过es做过,但是es不会玩儿,还没到那个水准- -javaAPI应该怎么实现啊
如果是你自己的需求需要实现一个有该功能的接口的话,调用需要排序的列表的sort方法,入参实现Comparator接口,重写里面的compare方法
// list是你要排序的对象的List(或其他集合)
// 这里假设你要排序的对象是Book类
List<Book> list = new ArrayList<>();
// 填充数据...后用sort方法排序
list.sort(new Comparator<>() {
@Override
public int compare(Book o1, Book o2) { // 这里o1 o2对象需要跟你要排序的对象是同类
// 先按字母数量从小到大排序
if (o1.getWordNum() != o2.getWordNum()){
return o1.getWordNum() - o2.getWordNum();
}
// 按引用次数从小到大排序
if (o1.getReferedTimes() != o2.getReferedTimes()){
return o1.getReferedTimes() - o2.getReferedTimes();
}
// 按字母从小到大排序
return o1.getLetters() - o2.getLetters();
}
});
我给你列一个demo :
GET /index/_search
{
"sort": [
{
"wordNum": {
"order": "asc"
}
},
{
"refrenceNum": {
"order": "desc"
}
},
{
"xxx.keyword": {
"order": "desc"
}
}
]
}
如果是jdk实现的话,可以直接使用list.sort(排序类),对应排序类写法:https://zhuanlan.zhihu.com/p/33636690
list.sort方法不是可以传入一个排序函数吗
你自己写好排序函数作为参数传进去