我有以下列表:
"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?
我刚刚开始了解溪流并且还不了解它,所以我想知道这样的事情是否可行。
答案 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));