我有两个班级,Student
和Book
。
我想将student.getBook(that will return Set<Book>)
返回的图书名称存储到List<String>
。
Student.java
public class Student {
private int id;
private String bookName;
//Setter and getter.......
}
Student.java
public class Student {
private int id;
private String student Name;
private Set<Book> books;
//Setters and Getters
}
这是主要方法
public static void main(String[] arg){
Book b1= new Book(1, "art");
Book b2= new Book(2, "science");
Book b3= new Book(3, "bio");
Set<Book> b=new HashSet<>();
b.add(b1);
b.add(b2);
b.add(b3);
Student s=new Student (1, "std1",b);
//here I want to store bookName
//into List, some thing like
List<String> book=new
ArrayList<>(s.getBooks().getBookName());
}
请帮助.....
答案 0 :(得分:1)
这就是Stream API派上用场的地方!
要将一组图书(s.getBooks()
)直接翻到带有图书名称的List<String>
,您只需map
和collect
。
List<String> bookNames = s.getBooks().stream()
.map(x -> x.getBookName())
.collect(Collectors.toList())
这可能看起来很新,所以我会一点一点地解释。
stream
方法会创建Stream<Book>
。这样您就可以在map
上执行常规操作,例如reduce
,filter
和Set
。然后我们map
书籍流。 map
只是“变换”的另一个词。因为您只需要书名,我们会将流中的每本书转换为书名。 x -> x.getBookName()
描述了我们想要如何转换它。这意味着“给定一本书x
,我们会得到书名x
”。最后,我们调用collect
,它“收集”流中的所有内容并将它们放回集合中。在这种情况下,我们需要List
,因此我们会调用toList()
。
答案 1 :(得分:0)
由于s.getBookNames()
会返回Set<Book>
,您必须遍历该集合以获取单个图书的名称,然后将其保存到代码中名为book
的另一个列表中:
List<String> bookNames = new ArrayList<>(); // initialize a list for all the book names
s.getBooks().forEach(book -> bookNames.add(book.getBookName())); // iterate all the books and add their names to the above list
此外,这也假设了评论中指出的一些显而易见的事情,
private String student Name; // this variable either named as 'student or `name` or `studentName`
,第一个模型适用于Book.java
而不是Student.java
。
答案 2 :(得分:0)
不过,我看到你对学生的模态定义并不好。您只需定义学生模态,如下所示。
在Student类中创建一个单独的公共方法来获取书名。
public class Student {
private int id;
private String name;
private Set<Book> books;
public Student(int id, String name, Set<Book> b) {
this.id = id;
this.name = name;
this.books = b;
}
// all getter and setter.
public List<String> getBookNames(){
return this.getBooks().stream().map(x -> x.getName()).collect(Collectors.toList());
}
}
如果您使用的是java1.8,那么扫地机建议您可以使用stream api来完成您的工作。
public static void main(String[] args) {
Book b1 = new Book(1, "art");
Book b2 = new Book(2, "science");
Book b3 = new Book(3, "bio");
Set<Book> b = new HashSet<>();
b.add(b1);
b.add(b2);
b.add(b3);
Student s = new Student(1, "std1", b);
List<String> books = s.getBookNames();
System.out.println(books);
}