如何创建流 return 列表? (Java)

How can I make streams return lists? (Java)

我有以下列表:

ObservableList<String> Books;

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

public ObservableList<String> getBooks() {
    return Books;       
}

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

Books
    .stream()
    .sorted();

然后让流 return 我有一个排序的 ObservableList?
我刚开始学习流,还不是很了解,所以我想知道这样的事情是否可行。

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

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

如果需要是ObservableList,需要自己发明Collector:

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

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


这确实是可能的,使用某种 Collectors. Or even Collectors. Assuming ObservableList is a Collection,您可以执行以下操作:

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

其中 ObservableList::new 是空 ObservableList 收集器的供应商。如果这不是您的 class 的工作方式,请更改它。

如果你想就地排序列表,不需要流,你可以直接调用

Collections.sort(books);

如果你想return一个新的排序ObservableList<Book>使用流,你可以这样做:

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