【发布时间】:2017-06-05 01:32:58
【问题描述】:
我有这样的输入
Online Add-on 3 GB 2015
Online Add-on 1.5 GB 2015
Online Add-on 12 GB 2015
Online Add-on 6 GB
Online Add-on 375 MB 2015
Online Add-on 750 MB 2014
我已经尝试过link 中给出的 alphanum 排序,它给了我如下所示的输出。
Online Add-on 1.5 GB 2015
Online Add-on 3 GB 2015
Online Add-on 6 GB
Online Add-on 12 GB 2015
Online Add-on 375 MB 2015
Online Add-on 750 MB 2014
但是,为了更好的人类可读性,我需要如下所示的输出,如果存在年份,则基于年份,必须先降低 MB,然后再降低 GB
Online Add-on 750 MB 2014
Online Add-on 375 MB 2015
Online Add-on 6 GB
Online Add-on 1.5 GB 2015
Online Add-on 3 GB 2015
Online Add-on 12 GB 2015
在 Java 中有什么方法可以做到这一点???
【问题讨论】:
-
特别是。 stackoverflow.com/a/14337783/2310289您需要拆分行并比较第三个元素
-
定义一个扩展
Comparable的类,它有两条数据:兆字节数(或字节数)和年份。定义一个比较器,首先比较年份,然后在年份相等时比较兆字节。当您阅读您的字符串时,使用split并查看第 4 个元素,看看您是否需要将第 3 个元素乘以 1000。 (如果您还想允许 KB、TB 等,请调整此项)。为每个输入字符串创建一个对象。使用比较器进行排序。谷歌上有关在 Java 中排序的任何教程以获取更多详细信息。 -
那"if year exists then based on the year"是什么意思?如果您有
10 MB 2014、900 MB 2014、20 MB 2015和800 MB 2015,那么500 MB(无年份)的第五个值将在哪里排序?如果先按年份排序,那么size就会全部分散,那么“无年份”的值在哪里呢? -
我宁愿将字符串解析为有意义的对象,并使用对象进行排序。例如。用
String rawString; int size; SizeUnit unit; Year year上课。然后用这些属性写比较应该是微不足道的
标签: java arrays string sorting comparator