请原谅我对java中优先级队列和比较器的理解。
似乎,我能够实现基于某种排序顺序的优先级队列的基本比较器。
但我无法为下面的场景想出一些东西:
1. Given a list of Files with name convention xx_yy_zz.dat .<br/>
2.xx,yy,zz can be from 00-50 <br/>
3.I need to process the files with xx=30 first,xx=35 second xx=40 third and then the rest.<br/>
因为我对优先级队列的知识有限,所以我尝试实现它,虽然我能够排序,但只使用asc或desc值xx,这不是必需的。
我的方法是
将文件名列表放在优先级队列中,在regex“\上拆分文件名,然后根据它的值使用comparator比较拆分数组的第一个索引,但正如预期的那样,我失败了,因为我的要求有所不同
请分享一些想法/方法。
遗憾的是,我并没有为我的案例找到一个必要的比较标准。
尽管如此,我还是期待着你的到来
2条答案
按热度按时间ecbunoof1#
你可以用简单的
if
内部声明compare()
方法来检查一个字符串是否以"30"
另一个没有。那你就知道这根弦必须在另一根弦之前。运行以下命令if
在文件名的第一部分这样的语句:它们是一样的吗?
左边的那个吗
30
?是对的吗
30
?左边的那个吗
35
?是对的吗
35
?左边的那个吗
40
?是对的吗
40
?比较器可能如下所示:
使用以下测试源代码:
您可能会得到这样的输出(取决于
data
阵列):(为清晰起见,增加了新行)
如你所见,你有
30
先是,然后是唯一的35
第二,然后是40
这是第三个,然后是所有剩下的东西。你可能想用compareTo()
在弦上以防compareTo
方法将返回0
为了得到更好的“子排序”字符串,这将是平等的基础上这个基本排序以上。n3h0vuf22#
也许我不明白你到底需要什么。。。但是只要尝试一下这个代码,如果字符串的开头有两个数字,它就会给我排序
adn输出
如果不能解决这个问题,请详细解释问题,也许我或其他人会帮助你。