流式传输到新集合的集合

我正在寻找最无痛的方法来过滤集合。我在想类似的东西


Collection<?> foo = existingCollection.stream().filter( ... ). ...

但我不确定如何最好从过滤器,返回或填充另一个集合。大多数例子似乎都像“在这里你可以打印”。可能有一个我缺少的构造函数或输出方法。


杨魅力
浏览 620回答 3
3回答

绝地无双

大多数例子都避免将结果存储到一个中,这是有原因的Collection。这不是推荐的编程方式。你已经有了一个Collection,提供源数据和集合的它本身没用。您希望对其执行某些操作,因此理想情况是使用流执行操作并跳过将数据存储在中间中Collection。这是大多数例子试图建议的。当然,有很多现有的API与Collections 一起使用,并且总会如此。所以StreamAPI提供了不同的方法来处理a的需求Collection。获取List保存结果的任意实现:List<T> results = l.stream().filter(…).collect(Collectors.toList());获取Set保存结果的任意实现:Set<T> results = l.stream().filter(…).collect(Collectors.toSet());得到具体的Collection:ArrayList<T> results =&nbsp; l.stream().filter(…).collect(Collectors.toCollection(ArrayList::new));添加到现有Collection:l.stream().filter(…).forEach(existing::add);创建一个数组:String[] array=l.stream().filter(…).toArray(String[]::new);使用该数组创建具有特定特定行为的列表(可变,固定大小):List<String> al=Arrays.asList(l.stream().filter(…).toArray(String[]::new));允许支持并行的流添加到临时本地列表并在以后加入它们:List<T> results&nbsp; = l.stream().filter(…).collect(ArrayList::new, List::add, List::addAll);(注意:这与Collectors.toList()当前实现的方式密切相关,但这是一个实现细节,即无法保证toList()收集器的未来实现仍将返回ArrayList)

炎炎设计

来自java.util.stream文档的一个例子:List<String>results =&nbsp; &nbsp; &nbsp;stream.filter(s -> pattern.matcher(s).matches())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.collect(Collectors.toList());Collectors有一种toCollection()方法,我建议这样看。

墨色风雨

作为一个更符合Java 8风格的函数式编程的例子:Collection<String> a = Collections.emptyList();List<String> result = a.stream().&nbsp; &nbsp; &nbsp;filter(s -> s.length() > 0).&nbsp; &nbsp; &nbsp;collect(Collectors.toList());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java