簡體   English   中英

如何使用contains來搜索特定字符串的自定義對象ArrayList?

[英]How do I use contains to search through a custom object ArrayList for a particular string?

我完全不喜歡編程(昨天開始......)和Java,所以請原諒任何愚蠢的錯誤和非常糟糕的代碼(我不知道如何訂購/格式化)。 我已經完成了制作視頻庫存的任務,我希望能夠搜索庫存以檢查特定視頻是否在那里。

我知道我可以使用contains來執行此操作,但我無法使用它來處理我的自定義對象ArrayList(視頻),我希望它能夠搜索所有數據(下面的每個InventoryRow)。 我已經覆蓋了equals和HashCode但它仍然無法工作 - 每當我嘗試運行代碼時,它總會告訴我即使視頻在那里也無法找到視頻。 (僅供參考,我在租用和檢查功能下使用包含在我的代碼末尾)

我真的很感激任何幫助,因為我一整天都在谷歌搜索無濟於事。 如果這不能做或其他方法會更好,請告訴我! 謝謝。

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;

class InventoryRow {
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result
            + ((availability == null) ? 0 : availability.hashCode());
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    result = prime * result
            + ((returndate == null) ? 0 : returndate.hashCode());
    result = prime * result + ((type == null) ? 0 : type.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    InventoryRow other = (InventoryRow) obj;
    if (availability == null) {
        if (other.availability != null)
            return false;
    } else if (!availability.equals(other.availability))
        return false;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    if (returndate == null) {
        if (other.returndate != null)
            return false;
    } else if (!returndate.equals(other.returndate))
        return false;
    if (type == null) {
        if (other.type != null)
            return false;
    } else if (!type.equals(other.type))
        return false;
    return true;
}

private String name;
private String type;
private Character availability;
private String returndate;

public InventoryRow(String name, String type, Character availability,
        String returndate) {
    this.name = name;
    this.type = type;
    this.availability = availability;
    this.returndate = returndate;
}

public String getReturndate() {
    return returndate;
}

public void setReturndate(String returndate) {
    this.returndate = returndate;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public Character getAvailability() {
    return availability;
}

public void setAvailability(Character availability) {
    this.availability = availability;
}

public String toString() {
    return name + "   " + type + "   " + availability + "   " + returndate;
}
}

public class InventorySort {

public static void main(String[] args) {
    List<InventoryRow> videos = new ArrayList<InventoryRow>();

    videos.add(new InventoryRow("Casablanca", "Old", 'Y', "1 January 2015"));
    videos.add(new InventoryRow("Jurassic Park", "Regular", 'N',
            "1 January 2015"));
    videos.add(new InventoryRow("2012", "Regular", 'Y', "1 January 2015"));
    videos.add(new InventoryRow("Ant-Man", "New", 'Y', "1 January 2015"));

    // Another ArrayList because I can't seem to search through the first
    // one?
    /*ArrayList<String> names = new ArrayList<String>();
    names.add("Casablanca");
    names.add("Jurassic Park");
    names.add("2012");
    names.add("Ant-Man");*/

    Scanner input = new Scanner(System.in);

    // Output the prompt
    System.out.println("What do you want to do?");

    // Wait for the user to enter a line of text
    String line = input.nextLine();

    // List, rent and check functions
    // List function
    if (line.equals("l")) {
        // Sort function
        Collections.sort(videos, new Comparator<InventoryRow>() {
            public int compare(InventoryRow o1, InventoryRow o2) {
                return o1.getName().compareTo(o2.getName());
            }
        });
        for (InventoryRow inventory : videos) {
            System.out.println(inventory);
        }
        // Rent function
    } else if (line.equals("r")) {
        System.out.println("Which video would you like to rent?");
        String line2 = input.nextLine();
        // Search through ArrayList
        if (videos.contains(line2)) {
            System.out.println("Video available to rent!");
        } else {
            System.out.println("Video unavailable to rent.");
        }
        // Check function
    } else if (line.equals("c")) {
        System.out
                .println("Which video would you like to check is in the inventory?");
        String line3 = input.nextLine();
        // Search through ArrayList
        if (videos.contains(line3)) {
            System.out.println("Video found!");
        } else {
            System.out
                    .println("Video not found. Please see the inventory below.");
            Collections.sort(videos, new Comparator<InventoryRow>() {
                public int compare(InventoryRow o1, InventoryRow o2) {
                    return o1.getName().compareTo(o2.getName());
                }
            });
            for (InventoryRow inventory : videos) {
                System.out.println(inventory);
            }
        }
        // If anything else is entered
    } else {
        System.out
                .println("The only options are to list (l), rent (r) or check (c).");
    }

}
}

你可以使用包含。 但是,對於編程的第一天,簡單地迭代您的庫存,將輸入字符串與視頻名稱進行比較可能更容易理解:

    boolean foundIt = false;
    for (InventoryRow ir : videos) {
        if (line3.equals(ir.getName())) {
            foundIt = true;
            break;
        }
    }
    if (foundIt) {
        System.out.println("Video found!");

替代@kilo回答,您可以僅在視頻類的名稱上實現equals和hashcode方法,並按以下方式檢查它。

String line3 = input.nextLine();
        // Search through ArrayList
        if (videos.contains(new Video(line3, null, null, null))) {
            System.out.println("Video found!");
        } 

僅當名稱匹配時,這將返回contains = true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM