Java 使用lambda使代码干净
下面是我的代码,我使用它根据参数对人员列表进行排序。。姓名、号码或电子邮件地址。 我想问一下如何使用lambda来美化这组代码,因为对于所有3种情况,它们都遵循类似的逻辑Java 使用lambda使代码干净,java,lambda,Java,Lambda,下面是我的代码,我使用它根据参数对人员列表进行排序。。姓名、号码或电子邮件地址。 我想问一下如何使用lambda来美化这组代码,因为对于所有3种情况,它们都遵循类似的逻辑 if (sortType.equals(NAME)) { Collections.sort(ListofPeople, (Person p1, Person p2) -> p1.getName().toString().compareTo(p2.getName().toString()))
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));
然后,您可以使用映射
来存储各种比较器
s,并去掉if-else语句
整个代码段(映射初始化旁边)将变为:
Collections.sort(ListofPeople,comparatorMap.get(sortType));
与其将比较的属性转换为
String
s,不如确保这些属性的类型(电话号码、电子邮件地址等)实现Comparable
好的,首先要使用Comparator.comparating
来获得Comparator
实例
例如:
Collections.sort(ListofPeople,Comparator.comparing(Person::getName));
然后,您可以使用映射
来存储各种比较器
s,并去掉if-else语句
整个代码段(映射初始化旁边)将变为:
Collections.sort(ListofPeople,comparatorMap.get(sortType));
与其将比较的属性转换为
String
s,我会确保这些属性的类型(电话号码、电子邮件地址等)实现compariable
首先考虑使用缩进,以使呈现的代码清晰易读。我这次为您格式化了代码,但在将来,请考虑一下自己做这件事,因为这个小小的努力使你的代码更容易理解,并且很受那些在这个网站上回答问题的志愿者们的赞赏。你只需要一个<代码>地图< /代码>。你可以通过使用<代码>比较器来比较LAMBDAS嵌套。比较(P->P.GNAMEMER)(toSTRIN())< /C> >等。首先考虑使用缩进来使你的代码干净并易于阅读。这次我为你格式化了你的代码,但是将来,请考虑自己做这件事,因为这个小小的努力使你的代码更容易理解,并且很受那些在这个网站上回答问题的志愿者的赞赏。你只需要一个<代码>地图< /代码>。您可以使用Comparator.comparating(p->p.getName().toString())
等使lambda更整洁。Nit:整个代码段并不完全是这样的:您需要使用getOrDefault(sortType,(a,b)->0)
来处理no-op“不等于任何一个”的情况。@如果问题中提到的类型都是可能的类型,我不确定是否需要一个默认处理程序。妮特:整个代码段并不完全是这样的:您需要使用getOrDefault(sortType,(a,b)->0)
来处理no op“not equal to any”的情况。@如果问题中提到的类型都是可能的类型,我不确定是否需要一个默认处理程序。