2016-06-09 41 views
0

我有以下列表:如何使流返回列表? (JAVA)

ObservableList<String> Books;

我知道,如果我想有排序列表中我可以写

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

现在,我的问题可能是非常荒谬的,但是......有没有一种方法可以实现与上述相同的结果?就像

Books 
    .stream() 
    .sorted(); 

但是然后有流返回我一个排序的ObservableList?
我刚刚开始了解流,并且还不太了解,所以我想知道是否有可能。

+0

你的第一个代码甚至与_sorting_没有密切关系,所以你不需要Java流。 – Tom

+0

您的第一个代码块是一个访问器/获取器,它返回一个'ObservableList ' - 它什么也不做。你的第二个代码块似乎排序了一个流,但我不确定。你的问题很混乱/没有意义。 –

+0

对不起,如果它不清楚,我的问题基本上是如何将流转换为可观察列表 – Mark

回答

3

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


这的确是可能的,使用Collector秒。甚至还有Collectors。假设ObservableList是某种形式的Collection,你可以做到以下几点:

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

ObservableList::new是一个空ObservableList的收集器的供应商。改变这个,如果这不是你的课程的作品。

+0

这一个工作,非常感谢!我只需在我的类中将ObservableList :: new更改为FXCollections :: observableArrayList。 – Mark

1

您需要使用Collector才能将Stream重新转换为列表。如果你不在乎什么类型的列表是的,有一个内置的收藏家:

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

如果它需要一个ObservableList,他们需要创造自己的收藏:

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

['toCollection()'](https://docs.oracle.com/javase/8/docs/api/java /util/stream/Collectors.html#toCollection-java.util.function.Supplier-)也是一件事情。 – bcsb1001

1

如果要排序的位置列表中,就没有必要对流,你可以叫

Collections.sort(books); 

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

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