在 ArrayList 中搜索匹配参数
Searching an ArrayList for a matching parameter
我有两个 classes Museum
和 Painting
。 Painting
class 按预期工作,但我遇到 Museum
class 的问题。该方法的目的是 return 一个与参数字符串匹配的博物馆拥有的画作的 ArrayList。
当我尝试编译代码时,收到很多错误消息,显然我没有正确编译代码。
例如,如果有一幅毕加索的画作 - 它应该只是 return 所有这些画作,没有别的。
我想我可能错过了一步 - 可能是先创建一个局部变量来存储它,但我有点困难。我也想知道ArrayList使用Painting对象时String是否正确
有人知道我在这里错过了什么吗?
public class Museum {
//creating the fields
private ArrayList<Painting> paintings;
private String name;
/**
* Create a Museum Class
*/
public Museum(String aMuseum) {
paintings = new ArrayList<>();
name = aMuseum;
}
public String listMatches(String searchString)
{
if(filename.equals(searchString)) {
return filename;
}
}
}
好的,我假设在您的绘画 class 中,您有一个属性是作者和一个 getter。
我已将 listMatches 方法更改为具有 for-each 循环。此循环将遍历您的 Paintings 数组列表中的每个元素,并将其作者的姓名保存在局部变量中。如果当前画作的作者与您要查找的作者匹配,则会打印标题。
我将 listMatches 的 return 类型从 String 更改为 void,因为您没有 returning 任何东西,只是打印。
如果您想使用它们,您可以将绘画保存在某个地方(例如另一个 ArrayList),而不仅仅是打印名称。请记住更改 return 类型,因为那样的话您将 returning 一些东西。
记得把作者的名字写的跟画里的一模一样,不然可能找不到。
我还没有机会尝试,但应该可以。
public class Museum {
//creating the fields
private ArrayList<Painting> paintings;
private String name;
/**
* Create a Museum Class
*/
public Museum(String aMuseum) {
paintings = new ArrayList<>();
name = aMuseum;
}
public void listMatches(String searchString)
{
String this_painting_author = new String();
for (Painting painting : paintings){
this_painting_author = painting.getAuthor();
if(this_painting_author.equals(searchString)) {
System.out.println(painting.getTitle());
}
}
}
}
按艺术家搜索画作应该return一个画作子列表(如果找不到画作可能为空):
public List<Painting> listMatches(String artist) {
List<Painting> matches = new ArrayList<>();
for (Painting painting : paintings) {
if (artist.equals(painting.getArtist())) {
matches.add(painting);
}
}
return matches;
}
Stream API 可用于此(更简洁和实用的风格):
public List<Painting> listMatches(String artist) {
return paintings.stream()
.filter(p -> artist.equals(p.getArtist()))
.collect(Collectors.toList());
}
我有两个 classes Museum
和 Painting
。 Painting
class 按预期工作,但我遇到 Museum
class 的问题。该方法的目的是 return 一个与参数字符串匹配的博物馆拥有的画作的 ArrayList。
当我尝试编译代码时,收到很多错误消息,显然我没有正确编译代码。
例如,如果有一幅毕加索的画作 - 它应该只是 return 所有这些画作,没有别的。
我想我可能错过了一步 - 可能是先创建一个局部变量来存储它,但我有点困难。我也想知道ArrayList使用Painting对象时String是否正确
有人知道我在这里错过了什么吗?
public class Museum {
//creating the fields
private ArrayList<Painting> paintings;
private String name;
/**
* Create a Museum Class
*/
public Museum(String aMuseum) {
paintings = new ArrayList<>();
name = aMuseum;
}
public String listMatches(String searchString)
{
if(filename.equals(searchString)) {
return filename;
}
}
}
好的,我假设在您的绘画 class 中,您有一个属性是作者和一个 getter。
我已将 listMatches 方法更改为具有 for-each 循环。此循环将遍历您的 Paintings 数组列表中的每个元素,并将其作者的姓名保存在局部变量中。如果当前画作的作者与您要查找的作者匹配,则会打印标题。
我将 listMatches 的 return 类型从 String 更改为 void,因为您没有 returning 任何东西,只是打印。
如果您想使用它们,您可以将绘画保存在某个地方(例如另一个 ArrayList),而不仅仅是打印名称。请记住更改 return 类型,因为那样的话您将 returning 一些东西。
记得把作者的名字写的跟画里的一模一样,不然可能找不到。
我还没有机会尝试,但应该可以。
public class Museum {
//creating the fields
private ArrayList<Painting> paintings;
private String name;
/**
* Create a Museum Class
*/
public Museum(String aMuseum) {
paintings = new ArrayList<>();
name = aMuseum;
}
public void listMatches(String searchString)
{
String this_painting_author = new String();
for (Painting painting : paintings){
this_painting_author = painting.getAuthor();
if(this_painting_author.equals(searchString)) {
System.out.println(painting.getTitle());
}
}
}
}
按艺术家搜索画作应该return一个画作子列表(如果找不到画作可能为空):
public List<Painting> listMatches(String artist) {
List<Painting> matches = new ArrayList<>();
for (Painting painting : paintings) {
if (artist.equals(painting.getArtist())) {
matches.add(painting);
}
}
return matches;
}
Stream API 可用于此(更简洁和实用的风格):
public List<Painting> listMatches(String artist) {
return paintings.stream()
.filter(p -> artist.equals(p.getArtist()))
.collect(Collectors.toList());
}