考虑以下代码:

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))中。

09-04 14:56