java - 通过 lambda 表达式应用过滤器后如何获取 Stream 的大小?

标签 java arrays lambda java-8

考虑以下代码:

List<Locale> locales = Arrays.asList(
    new Locale("en", "US"),
    new Locale("ar"),
    new Locale("en", "GB")
); 

locales.stream().filter(l -> l.getLanguage() == "en");

鉴于 ,我如何获得 locales ArrayList after 应用 filter 的大小locales.size() 给了我 before 应用 filter 的尺寸?

最佳答案

当您从列表中获取流时,它不会修改列表。如果想得到过滤后的流大小,就调用count()就可以了。

long sizeAfterFilter = 
    locales.stream().filter(l -> l.getLanguage().equals("en")).count();

如果您想获取新列表,只需在结果流上调用 .collect(toList())。如果您不担心修改列表,您可以简单地在 List 上使用 removeIf

locales.removeIf(l -> !l.getLanguage().equals("en"));

请注意,Arrays.asList 返回一个固定大小的列表,因此它会引发异常,但您可以将其包装在 ArrayList 中,或者只是收集List (resp. ArrayList) 中的过滤流使用 Collectors.toList()(resp. Collectors.toCollection(ArrayList: :new)).

关于java - 通过 lambda 表达式应用过滤器后如何获取 Stream 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29048988/

相关文章:

lambda - AWS Lambda 上的 Highcharts 导出服务器

java - 日期间隔大于应该的

java - 我们需要在哪个 fragment 方法中消费长期的weservice

java - 如何在java中获取XML文件中节点的完整路径?

javascript - 消除 javascript 数组中的元素

C# Linq over XML => Lambda 表达式

Java - .class 文件中的 package 语句是否被删除?

C99 可变长度数组维基百科示例

javascript - 如何在node.js中访问数组的特定索引

typescript - 为什么命名函数的处理方式与循环依赖中的箭头函数不同?