Java 流式处理任何匹配失败,带“0”;“不兼容类型”;错误

Java 流式处理任何匹配失败,带“0”;“不兼容类型”;错误,java,java-stream,Java,Java Stream,我想打印我给定号码集中的联系人,我正在尝试使用streams。通过谷歌搜索,我看到人们用我现在尝试的方式解决了这个问题。但是我得到了一个错误不兼容的类型:PhoneNumber不能转换为CharSequence,我不明白我需要做什么。错误出现在方法contactsByNumber 代码: PhoneNumber.java class PhoneNumber { private String name; private String number; public PhoneN

我想打印我给定号码集中的联系人,我正在尝试使用streams。通过谷歌搜索,我看到人们用我现在尝试的方式解决了这个问题。但是我得到了一个错误
不兼容的类型:PhoneNumber不能转换为CharSequence
,我不明白我需要做什么。错误出现在方法
contactsByNumber
代码: PhoneNumber.java

class PhoneNumber {

   private String name;
   private String number;

   public PhoneNumber(String name, String number) {
       this.name = name;
       this.number = number;
   }

   public String getName() {
       return name;
   }

   public String getNumber() {
       return number;
   }
}
电话簿

class PhoneBook {
    private Set<PhoneNumber> phoneNumbers;

    public PhoneBook() {
        this.phoneNumbers = new HashSet<>();
    }

    public void addContact(String name, String number) throws DuplicateNumberException {
        PhoneNumber pn = new PhoneNumber(name, number);
        if(phoneNumbers.contains(pn)) {
            throw new DuplicateNumberException(number);
         } else {
             phoneNumbers.add(new PhoneNumber(name, number));
         }
     }

     public void contactsByNumber(String number) {
          phoneNumbers.stream().parallel().anyMatch(number::contains);
     }
 }
class电话簿{
私人电话号码;
公共电话簿(){
this.phoneNumbers=新HashSet();
}
public void addContact(字符串名称、字符串编号)引发DuplicateNumberException{
PhoneNumber pn=新的电话号码(姓名、号码);
if(电话号码。包含(pn)){
抛出新的DuplicateNumberException(数字);
}否则{
添加(新的电话号码(姓名、号码));
}
}
公共无效联系人SYNUMBER(字符串编号){
phoneNumbers.stream().parallel().anyMatch(number::contains);
}
}
在本节中:

public void contactsByNumber(String number) {
    phoneNumbers.stream().parallel().anyMatch(number::contains);
}
它是一个
,您试图将其视为
字符串
。您需要将其映射到它的
name
属性:

public void contactsByNumber(String number) {
    phoneNumbers.stream().parallel().map(PhoneNumber::getName).anyMatch(number::contains);
}
但是,此方法不起任何作用,因为您忽略了
anyMatch
的结果。如果要打印结果,可以将
anyMatch
更改为
filter
,然后打印:

public void contactsByNumber(String number) {
    phoneNumbers.stream()
                .parallel()
                .map(PhoneNumber::getName)
                .filter(number::contains)
                .forEach(System.out::println);
}


另外,如果您没有很好的理由使用
并行流,我建议您不要使用,因为

谢谢您详细解释,这样下次我会知道的,谢谢!