首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从数组中查找项并将其添加到列表中(Java)

如何从数组中查找项并将其添加到列表中(Java)
EN

Stack Overflow用户
提问于 2019-05-06 00:43:51
回答 1查看 61关注 0票数 1

我有三个简单的类,我想从一个列表中读取,看看有多少书,有多少书正在使用。然后返回当前未使用的所有AudioBooks的列表。

书:

代码语言:javascript
复制
public class Book {
    public String name;
    private String owner;
    public boolean isUsed;
}

AudioBook:

代码语言:javascript
复制
public class AudioBook extends Book {
    private int totalQTY;
    public int neededQTY;
}

第三类用于管理它们:

代码语言:javascript
复制
public class Manage{
    List<AudioBook> myAudioBooks;
    Stack<Book> shelf;
    int shelfSize = 20;
}

我的第一个问题是,我如何检查每一项有多少项以及有多少项正在使用?第二个问题是,如何在myList中添加未使用的项?我试过这个:

代码语言:javascript
复制
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编程非常陌生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-06 01:49:43

您提出了两个不同的问题,需要两个不同的解决方案:

Q1:我的第一个问题是,我如何检查每个项目有多少项,有多少项正在使用?

A1:-使用经典的for each循环进行迭代

代码语言:javascript
复制
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:在你进入更高级的阶段之后,你会发现一些强大的应用编程接口,比如streams,这使得解决方案变得更加简单:

-使用流进行迭代

代码语言:javascript
复制
    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:

代码语言:javascript
复制
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:(使用streams )

代码语言:javascript
复制
public List<Book> findNotUsedBooks(){
    return myAudioBooks.stream()
                       .filter( book -> !book.isUsed())
                       .collect(Collectors.toList())
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55994205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档