我有一个对象(对象1供参考),它包含另一个对象的arraylist(对象2供参考)。
我想在Object1中包含一个方法,它将搜索项作为参数,然后遍历objects2的arraylist。通过每次迭代,它都需要将搜索项与对象拥有的每个变量进行比较(它有5个不同的变量)。例如:
用户输入搜索词,然后系统将遍历对象的arraylists。 arraylist中的第一个对象,它将该对象的5个String变量与搜索项进行比较,如果有一个匹配,它将打印该对象。然后它将移动到数组列表中的第二个对象并执行相同的操作...
我不太确定如何以一种可读的方式实现它。我能想到的唯一方法是实现多个IF OR OR语句......
有什么想法吗?感谢任何帮助,谢谢!
答案 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);
}
}
}