所以我找不到确切的解决办法。我有一个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;
}
}发布于 2021-05-23 19:48:19
有几件事需要解决:
您应该使用的是String#contains.
String#startsWith,必须将Stream映射到People#name.
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;
}发布于 2021-05-23 19:54:26
您应该更改您的筛选器,因为它不检查开头字母‘P’的名称:
public List<String> filterByLetterP(){
return this.crowd.stream()
.map(People::getName)
.filter(name -> name.charAt(0) == 'P')
.collect(Collectors.toList());
}https://stackoverflow.com/questions/67663682
复制相似问题