java - 使用 Java Streams 过滤对象的 ArrayList 以返回 String 类型的 ArrayList

标签 java arraylist java-stream

我在 SO 上找不到确切的解决方案。我有一个Crowd类由 Crowd 组成对象,它是 People 类型的数组列表。 People是一个具有属性 String name, Double bankBalance, Integer numberOfCarsOwned 的类.

在我的人群类中,我有以下方法,我试图按以字母 P 开头的名称进行过滤,并返回 String 类型的数组列表。 :

  public ArrayList<String> filterByLetterP(){
       ArrayList<String> filteredNames =  this.crowd.stream()
               .filter(name -> name.getName().contains("P"));
               return filteredNames;
    }

我的错误是: 所需类型ArrayList<String>提供Stream<People>

注意:我的解决方案必须使用流。如何纠正我的解决方案以使其正常工作?

引用下面的信息。

People类定义:

public class People {

    private String name;
    private Double bankBalance;
    private Integer numberOfCarsOwned;

    public People(String name, Double bankBalance, Integer numberOfCarsOwned) {
        this.name = name;
        this.bankBalance = bankBalance;
        this.numberOfCarsOwned = numberOfCarsOwned;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getBankBalance() {
        return bankBalance;
    }

    public void setBankBalance(Double bankBalance) {
        this.bankBalance = bankBalance;
    }

    public Integer getNumberOfCarsOwned() {
        return numberOfCarsOwned;
    }

    public void setNumberOfCarsOwned(Integer numberOfCarsOwned) {
        this.numberOfCarsOwned = numberOfCarsOwned;
    }
}

Crowd类定义:

public class Crowd {

    private ArrayList<People> crowd;

    public Crowd() {
        this.crowd = new ArrayList<>();
    }

    public ArrayList<People> getCrowd() {
        return crowd;
    }

    public void setCrowd(ArrayList<People> crowd) {
        this.crowd = crowd;
    }

    public void addPeopleToCrowd(People people){
        this.crowd.add(people);
    }

    public ArrayList<String> filterByLetterP(){
       ArrayList<String> filteredNames =  this.crowd.stream()
               .filter(name -> name.getName().contains("P"));
               return filteredNames;
    }
}

最佳答案

有几个问题需要解决:

  1. 您应该使用 String#startsWith 而不是 String#contains
  2. 您必须将Stream映射到People#name
  3. 您错过了收集Stream

按如下所示进行操作:

public List<String> filterByLetterP() {
    List<String> filteredNames = this.crowd.stream()
            .map(p -> p.getName())
            .filter(s -> s.startsWith("P"))             
            .collect(Collectors.toList());
    return filteredNames;
}

关于java - 使用 Java Streams 过滤对象的 ArrayList 以返回 String 类型的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67663682/

相关文章:

java - 测试类不认为我的 ArrayList 是 ArrayList

java - 无法使用 ArrayList 中对象的方法

list - Flutter 上传列表到 Google Firestore

java-8 - 用于比较谓词的链式 java.util.function.Predicate 调用

Java 7 中的 Java 流

java - 使用流 API 搜索列表中的值并保持搜索位置(标准化测量数据)

java - 多线程和停止线程

java - 我可以使用 ssh 运行 java jar 程序吗?

java - 对于以下从时间戳中删除纳秒和秒组件的快速方法,是否存在任何可能失败的边缘情况?

java - 在 Java 中获取 'trigrams'