gpt4 book ai didi

Java 8 类数组数组的流转换

转载 作者:行者123 更新时间:2023-11-30 06:40:40 25 4
gpt4 key购买 nike

我是 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;
}

public void setBookName(String bookName) {
this.bookName = bookName;
}

public String getBookId() {
return bookId;
}

public void setBookId(String bookId) {
this.bookId = bookId;
}

}

现在我的要求是创建一个数组,其中包含我拥有的 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?

最佳答案

是的 - 你需要一个 flatMap实现这一目标

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

如果你想让它空安全你需要添加额外的过滤,比如

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());

关于Java 8 类数组数组的流转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com