我想按号码打印给定集合中的联系人,我正在尝试使用流来实现。通过一点谷歌搜索,我看到人们按照我现在正在尝试的方式解决它。但是我收到此错误 Incompatible types: PhoneNumber is not convertible to CharSequence
而且我不明白我需要做什么。错误在方法 contactsByNumber
中
代码:
电话号码.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);
}
}
最佳答案
在本节中:
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
的结果.如果你想打印结果,你可以更改 anyMatch
至 filter
然后打印:
public void contactsByNumber(String number) {
phoneNumbers.stream()
.parallel()
.map(PhoneNumber::getName)
.filter(number::contains)
.forEach(System.out::println);
}
此外,如果您没有充分的理由使用 parallel
流,我建议不要使用一个,因为 it has a lot more overhead
关于java - 流式传输 anyMatch 失败,出现 "Incompatible types"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54540171/