如何在类的ArrayList中搜索字符串

时间:2016-03-01 00:06:26

标签: java search arraylist

/**
 * @param title title of the movie to search for
 * @return the movie with the given title 
 * or null if there is no movie in the library with that title
 */
public Movie findMovieByTitle(String title)
{
    for (Movie movie : movies){
        if(movies.contains(title)){
        return title;
    }
    else{
        return null;
    }
}
}

如何在ArrayList中找到标题?有类似的主题,但它们处理String ArrayList,我在另一个类中搜索标题。我是否需要创建局部变量并从Movie类调用方法?

这是电影课:

public class Movie
{
    private String title;
    private int runLength;  // length of the movie in minutes
    private int starRating; // rating from 1 to 4 stars (0 = not rated yet)

/**
 * Create a movie with the title, run length, and number of stars given
 * @param aTitle title of the movie
 * @param aRunLength run length of the movie in minutes
 * @param aStarRating star rating of the movie, a value from 1 to 4 inclusive
 */
public Movie(String aTitle, int aRunLength, int aStarRating)
{
    title = aTitle;
    runLength = aRunLength;
    setStarRating(aStarRating);
}

/**
 * Create a movie with the title and run length given
 * @param aTitle title of the movie
 * @param aRunLength run length of the movie in minutes
 */
public Movie(String aTitle, int aRunLength)
{
    title = aTitle;
    runLength = aRunLength;
    starRating = 0;
}

/**
 * @return title of the movie
 */
public String getTitle()
{
    return title;
}

/**
 * @return run length of the movie in minutes
 */
public int getRunLength()
{
    return runLength;
}

/** 
 * @return rating in stars of the movie; a value of 0 means "not rated"
 */
public int getStarRating()
{
    return starRating;
}

/**
 * Set the star rating of this movie to the value given
 * @param newRating new star rating of the movie
 */
public void setStarRating(int newRating)
{
    if (newRating >= 1 && newRating <= 4) {
        starRating = newRating;
    }
    else {
        System.out.println("Error: Valid range for star rating is 1 to 4");
    }
}

/**
 * Reset the star rating of this movie to "not rated"
 */
public void resetStarRating()
{
    starRating = 0;
}

/**
 * Increase the star rating of this movie by 1
 */
public void increaseStarRating()
{
    if (starRating < 4) {
        starRating = starRating + 1;
    }
}

/**
 * Decrease the star rating of this movie by 1
 */
public void decreaseStarRating()
{
    if (starRating > 1) {
        starRating = starRating - 1;
    }
}

/**
 * Print information on this movie
 */
public void printMovieInfo()
{
    System.out.println("---------------------------------");
    System.out.println(title);
    System.out.println("Run length: " + runLength);
    if (starRating == 0) {
        System.out.println("Rating: (no rating)");
    }
    else {
        System.out.println("Rating: " + starRating + " stars");
    }
    System.out.println("---------------------------------");
}

}

2 个答案:

答案 0 :(得分:2)

public Movie findMovieByTitle(String title) {
    return movies.stream() // open a stream on the movies collection
        .filter(movie -> movie.getTitle().equals(title)) // filter them based on their title
        .findFirst() // get the first matching item
        .get(); // this might throw NoSuchElementException if no element found
}

答案 1 :(得分:1)

试试这个。它应该工作

public Movie findMovieByTitle(String title)
{
    for (Movie movie : movies){
        if(movie.getTitle().equals(title)){
        return movie;
}
}
    return null;
}