【问题标题】:Find string value in ArrayList with own class使用自己的类在 ArrayList 中查找字符串值
【发布时间】:2017-06-10 14:12:51
【问题描述】:

这是我的第一个问题。我是一名学习工商管理的学生,开始学习java只是为了好玩。我正在学习芬兰大学的 MOOC 课程。我在做练习 101。我必须编写一个带有图书搜索功能的图书馆。可以按标题、出版商或年份进行搜索。

我唯一的想法是那些(不起作用的):

public ArrayList<Book> searchByPublisher(String publisher){
      ArrayList<Book> found = new ArrayList<Book>();
         if (bibo.contains(publisher)){
         found.add(bibo.get(bibo.indexOf(publisher)));              
            }            
         return found;

或:

public ArrayList<Book> searchByTitle(String title){
         ArrayList<Book> found = new ArrayList<Book>();
         String [] neueListe = new String[bibo.size()];
         for (int i = 0; i < bibo.size(); i++){
             neueListe[i] = bibo.get(i).toString();
             found.add(neueListe[i].toString());
         }
         return found;

"bibo" 是带有书籍的ArrayList

我在互联网上搜索了一些想法和解决方案,当然在 GitHub 上也遇到了一些。但是我发现的每个代码都使用了相同的想法:

for(Book i : this.bibo){
        if(StringUtils.included(i.title(), title)){
            found.add(i);
        }

在课程中从未使用过StringUtils.included,我的NetBeans 版本不知道它。

我的推理错误到底在哪里?

首先非常感谢 :-)

【问题讨论】:

  • StringUtils 属于 Apache Commons,一个第三方库,如果你想使用它,你必须在项目中包含它。当您这样做是为了学习时,您应该更好地编写自己的 StringUtils.included 方法。

标签: java arrays search arraylist


【解决方案1】:

StringUtils 是第三方库表单Apache Commons Lang。如果你想使用这个类,你应该在 Netbeans 中将Apache Commons Lang 添加到你的项目中。
本教程展示了如何在 Netbeans 中添加 Apache Commons: https://www.satollo.net/netbeans-apache-commons-and-commons-javadoc-for-auto-completion

【讨论】:

    【解决方案2】:

    我会这样做。

    public ArrayList<Book> searchByTitle(String title){
         ArrayList<Book> found = new ArrayList<Book>();
         for (Book book: bibo) {
             if(book.title.contains(title)) {
                  found.add(book);
             }
         }
         return found;
    

    如果您有更多的 Java 经验,还可以查看 Java 8 Streams 和过滤器函数。 Java 8 Streams example

    【讨论】:

      【解决方案3】:

      中的问题

      public ArrayList<Book> searchByPublisher(String publisher){
            ArrayList<Book> found = new ArrayList<Book>();
               if (bibo.contains(publisher)){
                   found.add(bibo.get(bibo.indexOf(publisher)));              
               }            
               return found;
      

      您是在询问bibo 是否包含String,而您应该询问它是否包含出版商字段等于该字符串的书(searchByPubisher 的输入)。

      public ArrayList<Book> searchByPublisher(String publisher){
            ArrayList<Book> found = new ArrayList<Book>();
             for(Book b: bibo){
              if(b.getPublisher().equals(publisher))
               found.add(b);              
               }            
               return found;
      }
      

      searchByTitle函数可以类似实现。

      我还要提一下,您也可以使用Streams 来完成这项工作。 (因为你正在学习java)下面的内容应该足以让你自己动手:

      List<Book> found = 
          bibo.stream()
                      .filter(b -> t.getPublisher().equals(publisher))
                      .collect(toList());
      

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        StringUtils 是 org.apache.commons.lang 库中的一个类

        1. 从 apache 链接下载最新的二进制 .zip 文件(当前为 commons-lang3-3.5-bin.zip): https://commons.apache.org/proper/commons-lang/download_lang.cgi
        2. 在您的 NetBeans 目录中创建一个“lib”文件夹
        3. 仅复制 zip 文件夹的 .jar 文件并将其粘贴到您创建的 lib 目录中
        4. 打开 NetBeans,右键单击您的项目 > 属性 > 库 > 添加 JAR/文件夹
        5. 选择“相对路径”并选择您粘贴到库文件夹中的 jar 文件

        【讨论】:

          猜你喜欢
          • 2017-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-13
          • 2015-07-14
          • 2014-05-24
          • 2017-03-30
          • 2023-03-12
          相关资源
          最近更新 更多