【发布时间】:2018-04-16 07:54:59
【问题描述】:
您好,我的代码中有许多类似的方法,如下所示,也许我将来会有更多。
public void getParticularBook(String nameOfBook){
String bookDetails = "";
Iterator<Book> iterator = allBooks.iterator();
while(iterator.hasNext()) {
Book b = iterator.next();
if(b.getTitle().equalsIgnoreCase(nameOfBook)){
bookDetails = b.toString();
}
}
System.out.println(bookDetails);
}
public void getBooksDataOnRange(int from, int to){
String bookDetails = "";
Iterator<Book> iterator = allBooks.iterator();
while(iterator.hasNext()) {
Book b = iterator.next();
if(b.getIssueYear() >= from && b.getIssueYear() <= to){
bookDetails = b.toString();
}
}
if(bookDetails.isEmpty()){
System.out.println("No books in range of: " + from + "-" + to);
}
System.out.println(bookDetails);
}
public void getBooksDataOnType(String type){
String bookDetails = "";
Iterator<Book> iterator = allBooks.iterator();
while(iterator.hasNext()) {
Book b = iterator.next();
if(b.getType().equalsIgnoreCase(type)){
bookDetails = b.toString();
}
}
if(bookDetails.isEmpty()){
System.out.println("No books of type: " + type);
}
System.out.println(bookDetails);
}
上面的方法是某种过滤器,它们根据例如返回数据。书的类型,书的发行日期。
问题是,是否可以重构所有此类方法的代码?或者也许更好地遵循上述方案? 感谢您的回答
【问题讨论】:
-
最后两种方法是按预期工作还是只打印出一本书的信息,即使应该打印多本书?
-
是的,您只能有一个带有 Predicate 类型参数的 getBooksByPredicate 方法。这个特殊的类是在 java 8 中引入的,它表示一个返回布尔值的方法。
标签: java refactoring