ストリームanyMatchは、「互換性のないタイプ」のエラーで失敗します

ステファン:

私は数で私の与えられたセットから連絡先を印刷したいと私は流れでそれをやろうとしています。少しはグーグルで、私はそれを私が今しようとしている方法を解決する人を見ました。しかし、私はこのエラーを取得していますIncompatible types: PhoneNumber is not convertible to 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);
     }
 }
GBlodgett:

このセクションで:

public void contactsByNumber(String number) {
    phoneNumbers.stream().parallel().anyMatch(number::contains);
}

それはStream<PhoneNumber>、あなたはとして扱うしようとしていますStringあなたはそれのにマッピングする必要がありますname属性:

public void contactsByNumber(String number) {
    phoneNumbers.stream().parallel().map(PhoneNumber::getName).anyMatch(number::contains);
}

あなたが結果を無視するようしかし、この方法では、何もしませんanyMatchあなたは結果を印刷したい場合は、変更される可能性anyMatchfilterして、印刷します:

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

あなたが使用する正当な理由がない場合、また、parallelストリームのように、私は、いずれかを使用していないお勧めします、それはより多くのオーバーヘッドをたくさん持っています

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=183875&siteId=1