Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用lambda使代码干净_Java_Lambda - Fatal编程技术网

Java 使用lambda使代码干净

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()))

下面是我的代码,我使用它根据参数对人员列表进行排序。。姓名、号码或电子邮件地址。 我想问一下如何使用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));
然后,您可以使用
映射
来存储各种
比较器
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”的情况。@如果问题中提到的类型都是可能的类型,我不确定是否需要一个默认处理程序。