嗨,我的代码中有很多类似的方法,如下所示,也许将来我会有更多。
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);
}
以上方法是某种过滤器,它基于例如返回数据书籍类型、书籍发行日期。
问题是,是否可以重构所有此类方法的代码?或者也许更好地遵循上述方案? 谢谢各位的解答
最佳答案
您可以创建一个名为 getBooksWithPredicate
的方法:
public static void getBooksWithPredicate(Predicate<Book> predicate, String errorMessage) {
String bookDetails = "";
Iterator<Book> iterator = allBooks.iterator();
while(iterator.hasNext()) {
Book b = iterator.next();
if(predicate.test(b)){
bookDetails = b.toString();
}
}
if(bookDetails.isEmpty()){
System.out.println(errorMessage);
}
System.out.println(bookDetails);
}
这基本上是所显示的所有三种方法的概括。然后调用这个方法就可以实现这三个方法:
public void getParticularBook(String nameOfBook){
getBooksWithPredicate(b -> b.getTitle().equalsIgnoreCase(nameOfBook), "");
}
public void getBooksDataOnRange(int from, int to){
getBooksWithPredicate(b -> b.getIssueYear() >= from && b.getIssueYear() <= to, "No books in range of: " + from + "-" + to);
}
public void getBooksDataOnType(String type){
getBooksWithPredicate(b -> b.getType().equalsIgnoreCase(type), "No books of type: " + type);
}
关于java - 重构了很多类似方法的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49852173/