首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java过滤对象的ArrayList,以返回字符串类型的ArrayList

使用Java过滤对象的ArrayList,以返回字符串类型的ArrayList
EN

Stack Overflow用户
提问于 2021-05-23 19:41:12
回答 2查看 2.3K关注 0票数 2

所以我找不到确切的解决办法。我有一个Crowd类,它由一个Crowd对象组成,它是一个类型为People的数组列表。People是一个具有String name, Double bankBalance, Integer numberOfCarsOwned属性的类。

在我的人群类中,我有下面的方法,用字母P开头的名字进行过滤,并返回String类型的数组列表

代码语言:javascript
复制
  public ArrayList<String> filterByLetterP(){
       ArrayList<String> filteredNames =  this.crowd.stream()
               .filter(name -> name.getName().contains("P"));
               return filteredNames;
    }

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

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

下面是参考信息。

People类定义:

代码语言:javascript
复制
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类定义:

代码语言:javascript
复制
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;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-23 19:48:19

有几件事需要解决:

您应该使用的是String#contains.

  • You,而不是String#startsWith,必须将Stream映射到People#name.

  • You,错过了收集Stream.

如下所示:

代码语言:javascript
复制
public List<String> filterByLetterP() {
    List<String> filteredNames = this.crowd.stream()
            .map(p -> p.getName())
            .filter(s -> s.startsWith("P"))             
            .collect(Collectors.toList());
    return filteredNames;
}
票数 4
EN

Stack Overflow用户

发布于 2021-05-23 19:54:26

您应该更改您的筛选器,因为它不检查开头字母‘P’的名称:

代码语言:javascript
复制
public List<String> filterByLetterP(){
    return this.crowd.stream()
            .map(People::getName)
            .filter(name -> name.charAt(0) == 'P')
            .collect(Collectors.toList());
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67663682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档