下面是我的代码,我在其中根据参数对人员列表进行排序..姓名、号码或电子邮件地址。 我想问一下如何使用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()));
}
最佳答案
嗯,第一件事是使用 Comparator.comparing
获取 Comparator
实例。
例如:
Collections.sort(ListofPeople,Comparator.comparing(Person::getName));
然后,您可以使用Map
来存储各种Comparator
,并摆脱if-else语句。
您的整个片段(除了 map 的初始化之外)将变成:
Collections.sort(ListofPeople,comparatorMap.get(sortType));
我不会将要比较的属性转换为String
,而是确保这些属性的类型(电话号码、电子邮件地址等...)实现Comparable
.
关于JAVA.使用lambda让代码变得干净,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47122288/