【问题标题】:How can I make streams return lists? (Java) [duplicate]如何制作流返回列表? (Java)[重复]
【发布时间】:2016-06-09 19:01:06
【问题描述】:

我有以下清单:

ObservableList<String> Books;

我知道如果我想得到排序列表,我可以写

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

现在,我的问题可能非常荒谬,但是......有没有办法通过流实现与上述相同的结果?类似的东西

Books
    .stream()
    .sorted();

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

【问题讨论】:

  • 您的第一个代码甚至与 排序 没有密切关系,因此您不需要 Java 流。
  • 你的第一个代码块是一个访问器/获取器,它返回一个ObservableList&lt;String&gt; - 它什么都不做。您的第二个代码块似乎对流进行了排序,但我不确定。您的问题令人困惑/没有意义。
  • 对不起,如果不清楚,我的问题基本上是如何将流转换为可观察列表

标签: java collections java-stream observablelist


【解决方案1】:

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


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

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

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

【讨论】:

  • 这个成功了,非常感谢!我只需要在课堂上将 ObservableList::new 更改为 FXCollections::observableArrayList。
【解决方案2】:

您需要使用Collector 将流转回列表。如果你不在乎它是什么类型的 List,有一个内置的收集器:

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

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

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

【讨论】:

【解决方案3】:

如果你想对列表进行排序,不需要流,你可以调用

Collections.sort(books);

如果你想使用流返回一个新的排序ObservableList&lt;Book&gt;,你可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2018-05-24
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2020-09-02
    相关资源
    最近更新 更多