下面是我的代码,我用它来根据参数...姓名或号码或电子邮件地址对人员列表进行排序。 我想问一下如何使用lambda来美化这组代码,就像所有3种情况一样,它们遵循类似的逻辑。
if (sortType.equals(NAME)) {
Collections.sort(ListofPeople, (Person p1, Person p2) ->
p1.getName().toString().compareTo(p2.getName().toString()));
} else if (sortType.equals(NUMBER)) {
Collections.sort(ListofPeople, (Person p1, Person p2) ->
p1.getPhone().toString().compareTo(p2.getPhone().toString()));
} else if (sortType.equals(EMAIL)) {
Collections.sort(ListofPeople, (Person p1, Person p2) ->
p1.getPhone().toString().compareTo(p2.getPhone().toString()));
}
答案 0 :(得分:2)
嗯,首先要使用Comparator.comparing
来获取Comparator
个实例。
例如:
Collections.sort(ListofPeople,Comparator.comparing(Person::getName));
然后,您可以使用Map
存储各种Comparator
,并删除if-else语句。
您的整个代码段(在地图初始化旁边)将变为:
Collections.sort(ListofPeople,comparatorMap.get(sortType));
我会确保这些属性的类型(电话号码,电子邮件地址等)实现String
,而不是转换您要与Comparable
进行比较的属性。