将字符串与对象变量的arraylist进行比较

时间:2016-04-25 12:24:40

标签: java object arraylist

我有一个对象(对象1供参考),它包含另一个对象的arraylist(对象2供参考)。

我想在Object1中包含一个方法,它将搜索项作为参数,然后遍历objects2的arraylist。通过每次迭代,它都需要将搜索项与对象拥有的每个变量进行比较(它有5个不同的变量)。例如:

用户输入搜索词,然后系统将遍历对象的arraylists。 arraylist中的第一个对象,它将该对象的5个String变量与搜索项进行比较,如果有一个匹配,它将打印该对象。然后它将移动到数组列表中的第二个对象并执行相同的操作...

我不太确定如何以一种可读的方式实现它。我能想到的唯一方法是实现多个IF OR OR语句......

有什么想法吗?感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

这是我的解决方案,假设你对lambdas(java8)不熟悉

public class MyObject {


    public String[] list = {"one", "two", "three", "four"};



    public String findMyString(String  searchCriteria){
        String result= null;
        for(int i=0; i<list.length; i++){
            if(list[i].equals(searchCriteria) ) return list[i];    
        }

        return result;
    }




    public static void main(String args[]){

        MyObject object = new MyObject();

        System.out.println(object.findMyString("zero"));
        System.out.println(object.findMyString("one"));
    }

}

输出如下:

null
one

可能有更高效的解决方案,但是您正在使用字符串进行搜索,除非您拥有非常大的数据集,否则它不应该是性能问题。

答案 1 :(得分:1)

假设您有一个包含四个字符串的Book类:

public class Book {
    private String title;
    private String publisher;
    private String author;
    private String isbn;

并且您想要检查一个键字符串是否与此类中的任何字符串匹配,您可以提供Book this方法,例如:

public boolean containsText(String key) {
    // your choice whether to use equals or equalsIgnoreCase
    return key.equalsIgnoreCase(title) 
            || key.equalsIgnoreCase(publisher) 
            || key.equalsIgnoreCase(author)
            || key.equalsIgnoreCase(isbn);
}

然后,如果你有一个List<Book> bookList并且想要显示带有匹配文字的书籍,你可以轻松地查看:

public void displayTextMatch(String key) {
    // iterate through list
    for (Book book : bookList) {
        // call Book's containText method
        if (book.containsText(key)) {
            // assuming Book has a decent `toString()` override:
            System.out.println(book);
        }
    }
}