Java二级排序_Java多级比较器

我正在解决一个问题,我必须从输入文件中获取这些“歌曲艺术家对”,并按字母顺序进行排序。排序准则如下:

首先应按作者姓名对歌手与歌手进行排序。

一旦按艺术家排序,如果同一艺术家有多首歌曲,则也应按字母顺序对其进行排序。

如果演出者名称以“ The”开头,则出于排序目的将其忽略。

我的问题是,当我对这些歌曲进行排序时,我可以对它们进行正确排序,但是在他们具有相同艺术家的条件下,我无法对歌曲进行排序。

这是输入文件的样子:

Hello - Adele

Yesterday - The Beatles

Love Me Like You Do - Ellie Goulding

Hey Jude - The Beatles

Istanbul - They Might Be Giants

我已经正确阅读了输入文件,但是到目前为止,我的比较器仅按字母顺序对艺术家进行排序。这是我的比较器的外观:

public static class SongComparator implements Comparator{

public int compare(Song a, Song b){

return a.effectiveAuthor().compareTo(b.effectiveAuthor());

}

}

(我创建了一个类来轻松跟踪歌曲及其艺术家。effectiveAuthor()方法返回作者的字符串,名称前没有“ The”)

当使用Song对象和比较器的数组调用Arrays.sort()时,这是我得到的输出:

Hello - Adele

Yesterday - The Beatles

Hey Jude - The Beatles

Love Me Like You Do - Ellie Goulding

Istanbul - They Might Be Giants

这是经过适当排序的输出结果:

Hello - Adele

Hey Jude - The Beatles

Yesterday - The Beatles

Love Me Like You Do - Ellie Goulding

Istanbul - They Might Be Giants

我最初的想法是遍历整个数组,并找到同一位艺术家的歌曲,然后找到一种对它们进行排序并将其重新插入该数组的方法,这有点复杂。有人告诉我可以使用更全面的比较器,让它们对艺术家和歌曲名称进行排序,并且我只需要为所有Song对象调用一次Arrays.sort。

有人可以告诉我如何制作与这种情况有关的更全面的比较器吗?我目前仅知道我可以使用比较器的两种方式,即比较数值(即,如果a> b返回-1,如果a ==

b,则返回0,如果a

谢谢

PS:这是我提到的Java程序的pastebin,如果您想进一步了解我要解决的问题。这就是我正在解析的文本文件的样子,第一行是测试用例的数量,其后是带有歌曲艺术家对的数量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值