亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 8 類數組數組的流轉換

Java 8 類數組數組的流轉換

繁花不似錦 2023-06-14 16:42:01
我是 Java 8 的新手。我需要使用以下方法在 Java 8 中創建一個字符串數組:我有如下所述的學校、主題、出版商、書籍的 Pojos -public class School {    private Subject[] subjects;    public Subject[] getSubjects() {         return subjects;    }    public void setSubjects(Subject[] subjects) {         this.subjects = subjects;    }}public class Subject {    private String subjectName;    private String subjectId;    private Publisher publisher;    public String getSubjectName() {        return subjectName;    }    public void setSubjectName(String subjectName) {        this.subjectName = subjectName;    }    public String getSubjectId() {        return subjectId;    }    public void setSubjectId(String subjectId) {        this.subjectId = subjectId;    }    public Publisher getpublisher() {        return publisher;    }    public void setPublisher(Publisher publisher) {        this.publisher = publisher;    }}public class Publisher{    private String name;    private String sinNo;    private Book[] books;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSinNo() {        return sinNo;    }    public void setSinNo(String sinNo) {        this.sinNo = sinNo;    }    public Book[] getBooks() {        return books;    }    public void setBooks(Book[] books) {        this.books = books;    }}public class Book {    private String bookName;    private String bookId;    public String getBookName() {        return bookName;    }現在我的要求是制作一個數組,其中包含我擁有的 School 對象中的所有 bookId。舊的 java 代碼下面是必需的代碼public static void main(String[] args) {    List<String> list = new ArrayList<>();    School first = <<School Object>>;    for(Subject sub : first.getSubjects()){        Publisher p = sub.getpublisher();        for(Book b : p.getBooks()) {            list.add(b.getBookId());        }        }    //desired result    String[] bookIds = (String[]) list.toArray();}}這可以使用 Java 8 流、收集器、映射來完成嗎?另外,如果我們只想獲得那些奇數/偶數的圖書 ID?
查看完整描述

1 回答

?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

是的 - 你需要一個flatMap來實現這個

Stream.of(first.getSubjects())
????.map(Subject::getPublisher)
????.map(Publisher::getBooks)
????.flatMap(Arrays::stream)
????.map(Book::getBookId)
????.collect(Collectors.toList());

如果你想讓它null 安全,你需要添加額外的過濾,比如

List<String>?collect?=?Stream.of(first.getSubjects())
????.map(Subject::getPublisher)
????.filter(Objects::nonNull)?//?filter?all?null?publishers
????.map(Publisher::getBooks)
????.filter(Objects::nonNull)?//?filter?all?null?book?lists
????.flatMap(Arrays::stream)
????.map(Book::getBookId)
????.filter(Objects::nonNull)?//?filter?all?null?book?ids
????.collect(Collectors.toList());


查看完整回答
反對 回復 2023-06-14
  • 1 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號