java - 如何从同一方法中查看对象的不同参数?
问题描述
我有一个联系人类,其中包含姓名、电子邮件和地址。我将它们存储在一个ArrayList
. 现在我有三种不同的方法用于让用户按姓名、电子邮件或地址搜索联系人。name.equals(contact.getName())
除了比较语句,一个 has ,另一个email.equals(contact.getEmail())
和最后一个 has之外,每个都与其他完全相同address.equals(contact.getAddress())
。我知道 DRY 原则,我认为它可以在这里应用,有没有办法避免在这种情况下重复自己?
public void searchName(String name)
{
for(int i = 0; i < contacts.size(); i++)
{
Contact contact = contacts.get(i);
if(name.equals(contact.getName())
{
printContactInfo(contact);
}
}
}
其他两种方法完全相同,但不是使用名称,而是使用电子邮件或地址。
解决方案
您可以将其作为函数传递。Java 8 的语法增强非常适合此类用例:
public void searchName(String name) {
search(name, Contact::getName);
}
public void searchEmail(String email) {
search(email, Contact::getEmail);
}
public void searchAddress(String address) {
search(address, Contact::getAddress);
}
private void search(String s, Function<Contact, String> f) {
contacts.stream().filter(c -> f.apply(c).equals(s)).forEach(this::printContactInfo);
}
推荐阅读
- sqlite - {SQLITE3} 如何强制查询不使用给定表上的索引?
- javascript - 傅里叶理想低通滤波器结果有点奇怪
- python - 到 CSV 的字典列表列表
- javascript - 未启用的“使用严格”正在阻止代码的执行
- python - 在键上切片字典的numpy数组
- c - 通过 C 中的管道重定向标准输入和标准输出适用于外部程序,但不适用于递归调用
- java - 如何在 Apache POI 中以增量循环 arraylist 字符串
- python - python中带有两个变量的非线性曲线拟合
- java - 问:如何设置用于if条件的变量
- html - 使用 Bootstrap 根据分辨率更改导航栏类型(水平、垂直和折叠)