我有三个用getter和setter定义的类,如下所示:ORM:
class Author {
Integer id;
String name;
}
class BookAuthor {
Integer id_book;
Author author;
}
class Book {
String title;
List<BookAuthor> authors;
}
我想从Book类创建一个id_author列表。 我发现一种方法是使用流。我试过这个:
List<Integer> result = authors.stream().map(BookAuthor::getAuthor::getId).collect(Collectors.toList());
但它似乎不起作用。 我可以访问Author类中的“id”属性吗?
编辑: 也许是一种方式:
List<Author> authorList = authors.stream().map(BookAuthor::getAuthor).collect(Collectors.toList());
List<Integer> result = authorList.stream().map(Author::getId).collect(Collectors.toList());
谢谢。
答案 0 :(得分:1)
我假设authors
变量是BookAuthor的列表(或集合),而不是作者(基于您的代码看起来像是这样)。
我认为你有正确的想法,我不认为你可以链接::
运营商。
所以尝试使用lambda:
authors.stream().
map(ba -> ba.getAuthor().getId()).
collect(Collectors.toList());
答案 1 :(得分:0)
public class Example {
public static void main(String[] args) {
Book book1 = new Book(); book1.authors = new ArrayList<BookAuthor>();
Author author1 = new Author(); author1.id = 5;
BookAuthor bookAuthor1 = new BookAuthor(); bookAuthor1.author = author1;
book1.authors.add(bookAuthor1);
List<Integer> idList = book1.authors.stream().map(ba -> ba.author.id).collect(Collectors.toList());
}
}
答案 2 :(得分:0)
您不能像这样链接方法引用。但您可以使用map
功能两次:
authors.stream()
.map(BookAuthor::getAuthor)
.map(Author::getId)
.collect(Collectors.toList());