поиск коллекции по определенному ключевому слову - PullRequest
2 голосов
/ 20 февраля 2010

Что я хочу сделать, это найти хэш-сет по ключевому слову ..

У меня есть 3 класса ...

  1. Основной ()
  2. Библиотека
  3. Предмет (CD, DVD, Книжные классы)

В библиотеке я пытаюсь выполнить поиск элементов в хэш-наборах.

В классе Item есть функция getKeywords.

вот класс предметов ...

import java.io.PrintStream;
import java.util.Collection;
import java.util.*;


class Item
{

private String title;
private String [] keywords;


public String toString()
{

String line1 = "title:    " + title + "\n" + "keywords: " + Arrays.toString(keywords);
return line1;
}


public void print()
{

System.out.println(toString());

}


public Item()
{

}

public Item(String theTitle, String... theKeyword)
{

this.title = theTitle;
this.keywords = theKeyword;

}

public String getTitle()
{
return title;
}

public String [] getKeywords()
{

    return keywords;

}


}

class CD extends Item
{

private String artist;
private String [] members;
// private String [] keywords;
private int number;


public CD(String theTitle, String theBand, int Snumber, String... keywords)
{
    super(theTitle, keywords);
    this.artist = theBand;
    this.number = Snumber;
   // this.keywords = keywords;

}


  public void addband(String... member)
{
    this.members = member;

}

public String getArtist()
{

    return artist;

}

public String [] getMembers()
{
 return members;   
 }


 // public String [] getKeywords()
 // {

  //  return keywords;

 //}


 public String toString()
 {



   return  "-Music-" + "\n"
     + "band:     " + artist + "\n" 
     + "# songs:  " + number + "\n" 
     + "members:  " + Arrays.toString(members) 
     + "\n" + super.toString() 
    // + "keywords: " + Arrays.toString(keywords) 
     + "\n" + "\n" ;

 }


 public void print()
 {


    System.out.println(toString());

 }


 }


 class DVD extends Item
{

private String director;
private String [] cast;
private int scenes;
 // private String [] keywords;


public DVD(String theTitle, String theDirector, int nScenes, String... keywords)
{
    super(theTitle, keywords);
    this.director = theDirector;
    this.scenes = nScenes;
   // this.keywords = keywords;

}

public void addmoviecast(String... members)
{
    this.cast = members;


}

public String [] getCast()
{
    return cast;

}



public String getDirector()
{
    return director;
}

 // public String [] getKeywords()
 // {

  //  return keywords;

 // }




 public String toString()
 {

    return "-Movie-" + "\n"
     + "director: " + director + "\n"
     + "# scenes: " + scenes + "\n"
     + "cast:     " + Arrays.toString(cast) + "\n"
     + super.toString() 
    // + "keywords: " + Arrays.toString(keywords) 
     + "\n" + "\n" ;

}

public void print()
{

  System.out.println(toString());  

}


}


class Book extends Item
{

private String author;
private int pages;


public Book(String theTitle, String theAuthor, int  nPages, String... keywords)
{
    super(theTitle, keywords);
    this.author = theAuthor;
    this.pages = nPages;
   // this.keywords = keywords;

}


public String getAuthor()
{

    return author;

}

//public String [] getKeywords()
// {

 //   return keywords;

//}




 public void print()
{

    System.out.println(toString());  

}


 public String toString()
{

    return "-Book-" + "\n"
     + "Author:   " + author + "\n" 
     + "# pages   " + pages + "\n"
     + super.toString() 
    // + "keywords: " + Arrays.toString(keywords) 
     + "\n" + "\n" ;

  }

  }

Надеюсь, я вас не смутил? Мне нужна помощь с функцией itemsForKeyword (ключевое слово String) ..

первое переданное ключевое слово - "научная фантастика", и я хочу найти ключевые слова в наборах и вернуть совпадения.

Что я делаю не так? Спасибо

Ответы [ 2 ]

1 голос
/ 20 февраля 2010

Вам нужно добавить что-то вроде:

String[] keywords = s.getKeywords();

for( String word : keywords ) {

  if( word.equals( keyword ) ) {

    key.add(s);
    break;
  }
}

Вы не можете сравнить строку с массивом строк. Было бы лучше, если бы ваши ключевые слова были в наборе. Вы могли бы тогда просто сделать:

if( s.getKeywords.contains( keyword ) ) {
  key.add(s);
}
0 голосов
/ 20 февраля 2010

getKeywords () собирается вернуть массив строк, и вы сравниваете, чтобы увидеть, равен ли этот массив одной строке. Это сравнение всегда будет возвращать false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...