我想要的:["Einstein","ist","kein","Stein"] ⇒ {" Einstein "= 2," kein "= 1," Stein "= 1}使用流我想将一个字符串列表转换为一个Map,找到所有" ei "示例。
我的代码陷入无限循环:
public static void main(String[] args) {
List<String> L5 = List.of("Einstein", "ist", "kein", "Stein");
Pattern P = Pattern.compile("[Ee]i");
Map<String, Integer> result = L5.stream().filter(S -> P.matcher(S).find()).collect(
Collectors.toMap(i -> i, i -> {
int count = 0;
while (P.matcher(i).find()) {
count++;
}
return count;
})
);
System.out.println(result);
}
我想计算Map中"ei"的示例数(特别是使用流)
1条答案
按热度按时间z4iuyo4d1#
问题出在
while (P.matcher(i).find())
行,每次while循环检查条件时,都会调用P.matcher(i)
,并创建一个新的匹配器示例来调用find()
,当然每次都返回true,因此它变成了无限循环。要解决这个问题,首先将
P.matcher(i)
赋给一个变量,这样就可以在同一个Matcher
示例上调用find()
。一个改进是我们可以使用
Matcher.results()
来获得计数,如下所示: