java - 流式传输 anyMatch 失败,出现 "Incompatible types"错误

标签 java java-stream

我想按号码打印给定集合中的联系人,我正在尝试使用流来实现。通过一点谷歌搜索,我看到人们按照我现在正在尝试的方式解决它。但是我收到此错误 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 的结果.如果你想打印结果,你可以更改 anyMatchfilter然后打印:

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/

相关文章:

java - Hibernate Envers 不创建修订

java - 流已被操作或关闭,尝试创建赛车手时获得异常

java - Collectors.groupingBy - 收集对象的某些属性列表而不是对象本身的列表

java - 如何将 List<Map<Customer, Map<key, BigDecimal>>> 转换为 Map<Customer, Map<key, BigDecimal>>

Java 继承和包装

java - Jackson Json 并没有这样的方法错误

java - 有没有一个Java函数可以将有序对数组转换为整数数组?

java - 为 install4j 安装程序创建自定义语言?

Java 流 : multiple grouping

java - 如何创建具有映射值的 map ?