feelingstoned
feelingstoned

Reputation: 95

How to search for a string inside an ArrayList of a class

/**
 * @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;
    }
}
}

How can I find the title in the ArrayList? There are similar topics to this but they deal with a String ArrayList, I'm searching for a title in another class. Do I need to make a local variable and call a method from the Movie class?

This is the Movie class:

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("---------------------------------");
}

}

Upvotes: 0

Views: 905

Answers (2)

Bax
Bax

Reputation: 4466

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
}

Upvotes: 2

shreshta bm
shreshta bm

Reputation: 304

Try this. It should work

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

Upvotes: 1

Related Questions