我想用数字打印我给定的联系人,我正试图用流做.通过一点谷歌搜索,我看到人们正在按照我现在正在尝试的方式解决它.但我收到这个错误Incompatible types: PhoneNumber is not convertible to CharSequence,我不明白我需要做什么.错误发生在contactsByNumber
Code:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
电话簿
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);
}
}
Run Code Online (Sandbox Code Playgroud)
GBl*_*ett 10
在这个部分:
public void contactsByNumber(String number) {
phoneNumbers.stream().parallel().anyMatch(number::contains);
}
Run Code Online (Sandbox Code Playgroud)
它是一个Stream<PhoneNumber>,你试图将它视为一个String.您需要将其映射到它的name属性:
public void contactsByNumber(String number) {
phoneNumbers.stream().parallel().map(PhoneNumber::getName).anyMatch(number::contains);
}
Run Code Online (Sandbox Code Playgroud)
但是这个方法什么都不做,因为你忽略了结果anyMatch.如果要打印结果,可以更改anyMatch为filter然后打印:
public void contactsByNumber(String number) {
phoneNumbers.stream()
.parallel()
.map(PhoneNumber::getName)
.filter(number::contains)
.forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)
此外,如果你没有充分的理由使用parallelStream,我建议不要使用一个,因为它有更多的开销