2015-12-06 2 views
-3

Я пытаюсь найти ключевое слово в ArrayList, а если найдено ключевое слово If, оно печатает, сколько «ключевого слова» есть в ArrayList. Но я получаю отпечаток «Найденные ключевые слова» независимо от того, какое ключевое слово Это потому, что метод поиска не работает по какой-либо причине.Строка поиска в ArrayList - Java

Вот код:

public ArrayList<Media> search(String keywordi) 
{ 
    keyword = keywordi; 
    System.out.println(keyword); 
    return (ArrayList<Media>) storage.stream() 
      .filter(m -> storage.contains(keyword)) 
      .collect(Collectors.toList()); 
} 

И

ArrayList<Media> result = (ArrayList<Media>) katalog.search("Tasty"); 

    if(result.size()==0) 
    { 
     System.out.println("No keywords found."); 

    } 
    else 
    { 
     System.out.println(result.size()+" keywords found."); 
    } 
+3

Разместите Ваши отношение код здесь в этом вопросе. – csmckelvey

+0

@takendarkk там вы идете! :) – logiacer

+0

Что такое тип «Media» и как он относится к ключевому слову «String»? – zapl

ответ

0

Это будет полезно для вашего вопроса:

List<Media> list = Arrays.asList(new Media("T"), new Media("Keyword"), new Media("Keyword"), 
      new Media("T"), new Media("Keyword"), new Media("Keyword"), 
      new Media("F"), new Media("T"), new Media("Keyword")); 
    String looking_for = "Keyword"; 
    long count 
      = list.stream() 
      .filter(i -> i.getWord().equals(looking_for)).count(); 
    System.out.println(count > 0 ? count + " keywords found" : "No keywords found"); 

Если предположить, что ваш Media класс, как показано ниже:

class Media { 

     private String word; 

     public String getWord() { 
      return word; 
     } 

     public void setWord(String word) { 
      this.word = word; 
     } 

     public Media(String word) { 
      this.word = word; 
     } 

    } 
+0

Как бы вы интегрировали это с моим кодом? – logiacer

+0

обновил мой ответ .. –

1

Я думаю filter вызов должен быть

filter(m -> m.contains(keyword)) 

но ваш Media класс не имеет метода contain. Так может быть, это должно быть

filter(m -> m.beskrivning.contains(keyword)) 
+0

Не работает:/ – logiacer

0

метод вы, вероятно, хотите, либо

public ArrayList<Media> search(String keywordi) { 
    return storage.stream() 
      .filter(media -> media.gettitel() != null ? media.gettitel().contains(keywordi) : false) 
      .collect(Collectors.toCollection(ArrayList::new)); 
} 

или

public List<Media> search(String keywordi) { 
    return storage.stream() // => Stream<Media> 
      .filter(media -> media.gettitel() != null ? media.gettitel().contains(keywordi) : false) 
      .collect(Collectors.toList()); 
} 

потому что ArrayList просто деталь, которая не имеет значения. Обычно предпочтительным является общий интерфейс List.

filter применяется к каждому элементу из Stream<Media>, который вы получаете, вызывая метод stream(). Это функция boolean, которая решает, должен ли элемент присутствовать на следующем шаге или нет. Если простое выражение не достаточно, то вы можете так же определить целый блок кода для анализа Media элемента вы получите:

public List<Media> search(String keywordi) { 
    return storage.stream() 
      .filter(media -> { 
       if (media.gettitel() != null && media.gettitel().contains(keywordi)) 
        return true; 
       if (media.getMediatyp() != null && media.getMediatyp().contains(keywordi)) 
        return true; 
       return false; 
      }) 
      .collect(Collectors.toList()); 
} 
+0

Я получаю эту ошибку: https://i.gyazo.com/aa2f2250a835afd229b3c4fc69e591d4.png – logiacer

+0

@logiacer еще раз попробовал, я обновил код. В случае, если 'gettitel()' может возвращать 'null', вам придется поймать этот случай. См. Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it – zapl

+0

Я получаю «Найденные ключевые слова». потому что в gettitel нет данных. Он хранится в хранилище ArrayList или исправляет меня, если я ошибаюсь? – logiacer

Смежные вопросы