请考虑以下代码:
List<Locale> locales = Arrays.asList(
new Locale("en", "US"),
new Locale("ar"),
new Locale("en", "GB")
);
locales.stream().filter(l -> l.getLanguage() == "en");
如果locales
给我的尺寸,那么在<{strong>>应用ArrayList
之后如何获得filter
locales.size()
的尺寸?之前应用filter
?
答案 0 :(得分:40)
从列表中获取流时,它不会修改列表。如果您想在过滤后获得流的大小,请在其上调用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
中,或者只是在{{1}中收集过滤后的流的内容} {resp。List
)使用ArrayList
(resp。Collectors.toList()
)。
答案 1 :(得分:12)
使用count()
方法:
long matches = locales.stream()
.filter(l -> l.getLanguage() == "en")
.count();
请注意,您正在使用==
比较字符串。喜欢使用.equals()
。虽然==
在比较实习字符串时会起作用,但否则会失败。
仅供参考,它只能使用方法参考编码:
long matches = locales.stream()
.map(Locale::getLanguage)
.filter("en"::equals)
.count();