在ArrayList中搜索字符串 - Java

时间:2015-12-06 21:18:48

标签: java arraylist

我正在尝试在ArrayList中搜索关键字,如果找到了关键字,则会打印ArrayList中有多少“关键字”。但是我得到的印刷品是“找不到关键字”,无论关键字是什么,因为搜索方法无法正常工作。

以下是代码:

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 个答案:

答案 0 :(得分:1)

我想filter调用应该是

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

但您的Media课程没有contain方法。 也许它应该是

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

答案 1 :(得分: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;
        }

    }

答案 2 :(得分: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());
}