有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

ArrayList Java中的搜索字符串

我试图在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) 个答案

  1. # 1 楼答案

    这将有助于回答您的问题:

        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. # 2 楼答案

    我想filter调用应该是

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

    但是Media类没有contain方法。 所以也许应该是这样

    filter(m -> m.beskrivning.contains(keyword))
    
  3. # 3 楼答案

    您可能想要的方法是

    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()方法得到的Stream<Media>中的每个元素。它是一个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());
    }