JAVA.使用lambda让代码变得干净

标签 java lambda

下面是我的代码,我在其中根据参数对人员列表进行排序..姓名、号码或电子邮件地址。 我想问一下如何使用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/

相关文章:

c++ - 插入 vector 时使用 lambda 的返回值而不是函数的返回值有意义吗?

java - 编写 Java 谓词以将列表与另一个列表进行比较

c++ - C++11 中的 C 风格回调

Java8 Effectively Final compile time error on non final variable

Java机器人与图像对比

java - 在 Hibernate 中同时使用 Query Api 和 Criteria Api 会导致问题

java - fmt :formatNumber how to display deltas (+/-)

java - 创建 Maven 原型(prototype)

java - 移动到另一个 Activity 时 Android 应用程序崩溃

java - Java 中的 'SAM type' 是什么?