gpt4 book ai didi

java - 避免条件的清洁方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:52:02 27 4
gpt4 key购买 nike

我有这样的代码:

 Map<String, String> args = new HashMap<>();

args.put("-T", "Tom Sawyer");
// args.put("-I", "1112223334");

if (args.containsKey("-T")) {
Book book = libraryService.findBookByTitle(args.get("-T"));
} else {
Book book = libraryService.findBookByIsbn(args.get("-I"));
}

图书馆服务:

public class LibraryService {

private final BookRepository bookRepository = new BookRepository();

public Book findBookByTitle(String title) {
return bookRepository.findByTitle(title);
}

public Book findBookByIsbn(String isbn) {
return bookRepository.findByIsbn(isbn);
}

图书资料库:

public class BookRepository {

private List<Book> books = new ArrayList<>();

public Book findByIsbn(String isbn) {
return books.stream()
.filter(s -> s.getIsbn().equals(isbn))
.findFirst()
.orElseThrow(() -> new RuntimeException(NO_BOOKS_FOUND));
}

public Book findByTitle(String title) {
return books.stream()
.filter(s -> s.getTitle().equals(title))
.findFirst()
.orElseThrow(() -> new RuntimeException(NO_BOOKS_FOUND));
}

是否有一种干净的方法来避免 ifs?我希望我的代码决定是否必须使用参数 -I-T。我处理了 args 没有任何参数的情况,我只是简化了 StackOverflow 的代码。我在我的代码中多次使用方法 findByTitle 和 findByIsbn,所以我不确定其他方法是否适合这里。

最佳答案

不是将参数传递给存储库,而是将一个完整的 Predicate 传递给它:

public class findOneByPredicate(Predicate<Book> filter) {
return books.stream()
.filter(filter)
.findFirst()
.orElseThrow(() -> new RuntimeException(NO_BOOKS_FOUND));
}

然后你可以这样调用它:

findOneByPredicte(b -> b.getIsbn().equals("ISBN"));

关于java - 避免条件的清洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50432617/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com