java如何组合两个集合。排序函数
我有一个程序,其中有一个名字列表,以及有多少人有这个名字。我想把名字按字母顺序排列,同时把计数从大到小排列。如果名称的计数相同,则按字母顺序排列名称。我知道如何把名字按abc顺序排列,也知道如何把计数从大到小排列,但我不知道如何把两者结合起来,得到从大到小排列的名字列表,以及它们是否按字母顺序排列有相同的计数
Collections.sort(oneName, new OneNameCompare());
for(OneName a: oneName)
{
System.out.println(a.toString());
}
Collections.sort(oneName, new OneNameCountCompare());
for(OneName a: oneName)
{
System.out.println(a.toString());
}
# 1 楼答案
假设您使用的是Apache Commons Collections API,那么您可能想查看^{} :
# 2 楼答案
使用Java 8中的lambdas:
# 3 楼答案
您可以创建另一个
Comparator
,它结合了其他两个Comparator
的效果。如果一个比较器比较相等,则可以调用第二个比较器并使用其值然后你可以只打一次电话
Collections.sort
这可以推广到任何数量的比较器
# 4 楼答案
你可以这样组合比较器
顺便说一句,比较器是何时使用无状态单例的一个很好的例子。所有比较器或类型都是相同的,所以您只需要其中一个
这样可以避免创建新实例或缓存副本。你只需要每种类型中的一种