如何制作流返回列表? (JAVA)

时间:2016-06-09 19:01:06

标签: java collections java-stream observablelist

我有以下列表:

"select p.contributors as c from Project p where p.id = :pId and c.id = :cId"

我知道如果我想要排序列表我可以写

ObservableList<String> Books;

现在,我的问题可能是非常荒谬的,但是......有没有办法用流来实现与上面相同的结果?像

这样的东西
public ObservableList<String> getBooks() {
    return Books;       
}

然后让流返回一个已排序的ObservableList?
我刚刚开始了解溪流并且还不了解它,所以我想知道这样的事情是否可行。

3 个答案:

答案 0 :(得分:3)

旁注:Books是变量的错误命名约定;使用books

这确实可以,使用Collector s。甚至是Collectors。假设ObservableList是某种Collection,您可以执行以下操作:

ObservableList<String> hereYouGo = Books.stream()
      .sorted()
      .collect(Collectors.toCollection(ObservableList::new));

其中ObservableList::new是收集器的空ObservableList的供应商。如果不是您的班级如何运作,请更改此内容。

答案 1 :(得分:1)

您需要使用Collector将Stream转回List。如果你不关心它是什么类型的List,那么就有一个内置的收集器:

getBooks().stream().sorted().collect(Collectors.toList())

如果需要是ObservableList,则需要创建自己的收集器:

getBooks().stream().sorted
    .collect(ObservableList::new, ObservableList::add, ObservableList::addAll);

答案 2 :(得分:1)

如果您想对列表进行排序,则不需要流,您只需致电

Collections.sort(books);

如果要使用流返回新的已排序ObservableList<Book>,可以执行以下操作:

ObservableList<Book> sortedBooks = books.stream()
        .sorted()
        .collect(Collectors.toList(FXCollections::observableArrayList));