在 ArrayList 中搜索匹配参数

Searching an ArrayList for a matching parameter

我有两个 classes MuseumPaintingPainting 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());
}