首页 > 解决方案 > 如何从同一方法中查看对象的不同参数?

问题描述

我有一个联系人类,其中包含姓名、电子邮件和地址。我将它们存储在一个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);
       }
     }
}

其他两种方法完全相同,但不是使用名称,而是使用电子邮件或地址。

标签: javaoop

解决方案


您可以将其作为函数传递。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);
}

推荐阅读