3 回答
TA贡献1946条经验 获得超4个赞
大多数例子都避免将结果存储到一个中,这是有原因的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 =
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
= l.stream().filter(…).collect(ArrayList::new, List::add, List::addAll);
(注意:这与Collectors.toList()当前实现的方式密切相关,但这是一个实现细节,即无法保证toList()收集器的未来实现仍将返回ArrayList)
TA贡献1808条经验 获得超4个赞
来自java.util.stream文档的一个例子:
List<String>results =
stream.filter(s -> pattern.matcher(s).matches())
.collect(Collectors.toList());
Collectors有一种toCollection()方法,我建议这样看。
TA贡献1853条经验 获得超6个赞
作为一个更符合Java 8风格的函数式编程的例子:
Collection<String> a = Collections.emptyList();
List<String> result = a.stream().
filter(s -> s.length() > 0).
collect(Collectors.toList());
添加回答
举报