Java 如何使用if语句缩短方法?

Java 如何使用if语句缩短方法?,java,if-statement,Java,If Statement,我想缩短这个方法。 你能告诉我怎么去吗?我试过了,但结果不好。 书籍列表长度未知。它可以是10,但也可以是0。如果有,我需要3本书 public List<Book> findTheLatest3Books() { List<Book> books = new ArrayList<>(bookRepository.findAllByOrderByDateOfCreation()); List<Book> listOf3LatestB

我想缩短这个方法。 你能告诉我怎么去吗?我试过了,但结果不好。
书籍
列表长度未知。它可以是10,但也可以是0。如果有,我需要3本书

public List<Book> findTheLatest3Books() {
    List<Book> books = new ArrayList<>(bookRepository.findAllByOrderByDateOfCreation());
    List<Book> listOf3LatestBooks = new ArrayList<>();
    if (books.size() >= 3) {
        for (int i = 0; i < 3; i++) {
            if (books.get(i).isAvailable()) {
                listOf3LatestBooks.add(books.get(i));
            }
        }
    }
    if (books.size() == 2) {
        for (int i = 0; i < 2; i++) {
            if (books.get(i).isAvailable()) {
                listOf3LatestBooks.add(books.get(i));
            }
        }
    }
    if (books.size() == 1) {
        for (int i = 0; i < 1; i++) {
            if (books.get(i).isAvailable()) {
                listOf3LatestBooks.add(books.get(i));
            }
        }
    }
    if (books.size() == 0) {
        throw new IllegalArgumentException("No books in DB");
    }
    return listOf3LatestBooks;
}
公共列表查找最新的3本书(){
List books=new ArrayList(bookRepository.findAllByOrderByDateOfCreation());
listOf3LatestBooks=new ArrayList();
如果(books.size()>=3){
对于(int i=0;i<3;i++){
if(books.get(i).isAvailable()){
最新的3本书的列表。添加(books.get(i));
}
}
}
如果(books.size()==2){
对于(int i=0;i<2;i++){
if(books.get(i).isAvailable()){
最新的3本书的列表。添加(books.get(i));
}
}
}
如果(books.size()==1){
对于(int i=0;i<1;i++){
if(books.get(i).isAvailable()){
最新的3本书的列表。添加(books.get(i));
}
}
}
如果(books.size()==0){
抛出新的IllegalArgumentException(“数据库中没有书”);
}
3本最新书籍的归还清单;
}
如果
books.size()<3
,则使用大小,否则使用
3

if (books.isEmpty()) {
    throw new IllegalArgumentException("No books in DB");
}

final int n = books.size() >= 3 ? 3 : books.size();

for (int i = 0; i < n; ++i) {
    if (books.get(i).isAvailable()) {
        listOf3LatestBooks.add(books.get(i));
    }
}
if(books.isEmpty()){
抛出新的IllegalArgumentException(“数据库中没有书”);
}
final int n=books.size()>=3?3:书籍。大小();
对于(int i=0;i
看起来您使用了一个定制的SpringJPA存储库方法。您只能通过流获取前3条记录。

List<Book> books = ...    
if (books.isEmpty()) throw new IllegalArgumentException("No books in DB");            
return books.stream() // Stream<Book>
            .limit(3) // truncated to be no longer than 3 in length.
            .filter(Book::isAvailable) // keep only books that are available               
            .collect(Collectors.toCollection(ArrayList::new));
列出书籍=。。。
if(books.isEmpty())抛出新的IllegalArgumentException(“DB中没有书”);
还书。stream()//stream
.limit(3)//长度被截断为不超过3。
.filter(Book::isAvailable)//仅保留可用的书籍
.collect(收集器.toCollection(ArrayList::new));

这使用一个流,将流的长度截断为不超过
3
,然后过滤以保留可用的书籍。

您可以在
for
语句中应用条件
i<3&&i

public List<Book> findTheLatest3Books() {
    List<Book> books = new ArrayList<Book>(bookRepository.findAllByOrderByDateOfCreation());
    List<Book> listOf3LatestBooks = new ArrayList<>();

    for (int i = 0; i < 3 && i < books.size(); i++) {
        if (books.get(i).isAvailable()) {
            listOf3LatestBooks.add(books.get(i));
        }
    }

    if (books.size() == 0) {
        throw new IllegalArgumentException("No books in DB");
    }
    return listOf3LatestBooks;
}
公共列表查找最新的3本书(){
List books=new ArrayList(bookRepository.findAllByOrderByDateOfCreation());
listOf3LatestBooks=new ArrayList();
对于(int i=0;i<3&&i
如果书的长度为2个元素,一切都会好起来吗?@lilikaa1是的,如果列表中的项目少于
3
,那么就需要这个数量。因此,如果是
2
,则需要
2
这是您要问的一个基本问题。在询问社区之前,你真的应该试着找到一种自己做这件事的方法。。。你永远不会这样进步。。。令人遗憾的是,人们回答了这一问题,并对贫穷开发人员的“形成”表示同情——这是真的。我使用了
findFirst3ByOrderByDateOfCreation
,它可以正常工作。不知道哪种方法更好、更高效?@lilikaa1
findFirst3ByOrderByDateOfCreation
更好、更高效。可能有很多书,而你需要3本。方法名非常有表现力。
final int n=books.size()>=3?3:书籍。大小()可以简化为-->
final int n=Math.min(3,books.size())
。我想这是选择的问题。