考虑以下代码:
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
之前给了我的大小,我如何在应用filter
之后得到locales.size()
filter
的大小? 最佳答案
从列表中获取流时,它不会修改列表。如果要在过滤后获取流的大小,请在其上调用count()
。
long sizeAfterFilter =
locales.stream().filter(l -> l.getLanguage().equals("en")).count();
如果要获取新列表,只需在结果流上调用
.collect(toList())
。如果您不担心就地修改列表,则只需在removeIf
上使用List
即可。locales.removeIf(l -> !l.getLanguage().equals("en"));
请注意,
Arrays.asList
返回一个固定大小的列表,因此它将引发异常,但是您可以将其包装在ArrayList
中,或者仅使用List
(resp。ArrayList
)将过滤后的流的内容收集在Collectors.toList()
(resp。Collectors.toCollection(ArrayList::new)
)中。