2017-04-12 113 views
3

我有一个可选的整数列表。我希望看看列表是否实际存在,然后将其转换为流。这样做的一种方法是遍历可选的整数列表ifPresent

Optional<List<Integer>> listOfNumbers = ... 
if (listOfNumbers.isPresent()) { 
    listOfNumbers.get().stream(); 
} 

但是,我不希望有如果条件。我搜索,发现ifPresent()做同样的事情,但是当我做listOfNumbers.ifPresent(this::get)),我得到以下错误:

non-static variable this cannot be referenced from a static context

能否请你帮我有效的方式做到这一点?这对我来说仍然是新的,所以如果我的理解有任何不正确的地方,请告诉我。

+2

'listOfNumbers.orElse( Collections.emptyList())。stream()...'? –

回答

7

正如在评论中指出,最干净的方式来获得一个Stream是使用Optional.orElseCollections.emptyList

Stream<Integer> stream = listOfNumbers.orElse(Collections.emptyList()).stream(); 

Optional.map其他可能的解决方案:

Stream<Integer> stream = listOfNumbers.map(List::stream).orElse(Stream.empty()); 
+2

我最喜欢第二个版本。我认为这更重要,因为我们确实不需要空的列表,只是一个空的流, –