如何通过函数编程计算Java中的元音?
我需要计算函数Java中单词列表中元音的数量。 如果我有这个清单:
List<String> l = Arrays.asList("hello", "world", "test");
我的想法是“删除”元音,然后这样做减法:
int tot = l.stream().map(s -> s.replace("a", "")).
map(s -> s.replace("e", "")).
map(s -> s.replace("i", "")).
map(s -> s.replace("o", "")).
map(s -> s.replace("u", "")).
map(s -> s.length()).reduce(0, Integer::sum);
int res = l.stream().map(s->s.length()).reduce(0, Integer::sum)-tot;
有更好的方法吗
# 1 楼答案
您可能担心的是多个
replace
调用,这与函数式编程无关。替换这些调用的一种方法是使用正则表达式和replaceAll
:这个单一映射将替换所有删除元音的5个映射
使用正则表达式,还可以删除所有非元音。这样,就不必减去^{:
现在您仍然有两个连续的
map
,您可以将它们组合成一个:这现在更实用了,因为我已经删除了减去
tot
的步骤。这个操作现在只被描述为功能的组合(就这个抽象级别而言),而不是一堆“步骤”# 2 楼答案
这个怎么样:
# 3 楼答案
可以使用
replaceAll
用一个map
消除多个map
[aeiou]
它将匹配[]
中的任何字符,并用空字符串替换它# 4 楼答案
我会把它分解成字符流,只过滤元音,然后数数: