我有三个简单的类,我想从一个列表中阅读,以找出其中有多少本书,正在使用多少本书。然后返回当前未使用的所有有声读物的列表。
图书:
public class Book {
public String name;
private String owner;
public boolean isUsed;
}
有声读物:
public class AudioBook extends Book {
private int totalQTY;
public int neededQTY;
}
以及用于管理它们的第三类:
public class Manage{
List<AudioBook> myAudioBooks;
Stack<Book> shelf;
int shelfSize = 20;
}
我的第一个问题是,如何检查每个物品有多少,正在使用多少?第二个问题是,如何在myList中添加未使用的项目?我尝试过:
public List<Book> findNotUsedBooks(){
//get totalQTY of each book and add them to a list
for(int i = 0; i < myAudioBooks.size(); i++){
List<Integer> myList = myAudioBooks.get(i).getQTY();
}
List<Book> myList = new ArrayList<Book>();
for(AudioBook a : myAudioBooks){
//this wouldn't work because getQTY() returns an int
myList.add(a.getQTY());
}
return myList;
}
很抱歉,如果这个问题不够清楚,我对Java编程还是很陌生。
答案 0 :(得分:1)
您要问两个不同的问题,需要两个不同的解决方案:
Q1:我的第一个问题是,如何检查每个物品有多少,正在使用多少?
A1: ---对每个循环使用经典迭代---
public Integer findQTYofUsedBooks(){ // although I would suggest to go for a Long
Integer qty = 0;
for( Book book: myAudioBooks ) { // forEach loop in java
if(book.isUsed()) {
qty += book.getQTY();
}
}
return qty;
}
A2:在您变得更高级之后,您会发现一些功能强大的API(如流),这使解决方案变得更加微不足道:
---使用流进行迭代---
public Integer findQTYofUsedBooks(){
return myAudioBooks.stream() // iterate
.filter(book -> book.isUsed()) // keep only used books
.mapToInt(book -> book.getQTY()) // get QTY
.sum(); // sum the QTY
}
Q2:如何在myList中添加未使用的项目?
A1:
public List<Book> findNotUsedBooks(){
List<Book> notUsedBooks = new ArrayList<>();
for( Book book: myAudioBooks ) { // same trick as before just this time we add to a list of books
if( !book.isUsed()) {
notUsedBooks.add(book);
}
}
return notUsedBooks;
}
A2 :(带有流)
public List<Book> findNotUsedBooks(){
return myAudioBooks.stream()
.filter( book -> !book.isUsed())
.collect(Collectors.toList())
}