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

lil*_*aa1 -1 java if-statement

我想缩短这个方法.你能告诉我怎么做的吗?我试了一下,但效果不好. Books列表长度未知.它可以是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;
}
Run Code Online (Sandbox Code Playgroud)

Ous*_* D. 5

通过流:

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));
Run Code Online (Sandbox Code Playgroud)

这使用截断流的流不超过3长度,然后过滤以保留可用的书.