考虑以下代码:
List<Locale> locales = Arrays.asList(
new Locale("en", "US"),
new Locale("ar"),
new Locale("en", "GB")
);
locales.stream().filter(l -> l.getLanguage() == "en");
鉴于 ,我如何获得
给了我 before 应用 locales
ArrayList
after 应用 filter
的大小locales.size()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/