返回一组对象的方法,想存储为String的List

时间:2017-09-02 07:22:23

标签: java

我有两个班级,StudentBook。 我想将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());
}

请帮助.....

3 个答案:

答案 0 :(得分:1)

这就是Stream API派上用场的地方!

要将一组图书(s.getBooks())直接翻到带有图书名称的List<String>,您只需mapcollect

List<String> bookNames = s.getBooks().stream()
    .map(x -> x.getBookName())
    .collect(Collectors.toList())

这可能看起来很新,所以我会一点一点地解释。

stream方法会创建Stream<Book>。这样您就可以在map上执行常规操作,例如reducefilterSet。然后我们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);
}