我目前有一个函数,它搜索一个字符串数组并接受一个char参数,并返回一个int信号,表示以给定字符结尾的出现次数,我需要对其进行修改,以便它只计算以该字符结尾的出现次数具体人物。
例如:
如果我有Luke和Jen而我正在寻找'e',那么输出将是一个,因为luke是唯一一个以'e'结尾的
这是我目前的代码。
public int countFirstNameOccurrences(char c) {
return Reg.stream() // get Stream<Name>
.map(Name::getFirstName) // convert Stream<Name> to Stream<String> using Name's firstName
.mapToInt(s -> s.length() - s.replace(String.valueOf(c), "").length()) // calculate every occurrence c in each firstName and get an IntStream
.sum(); // sum all the values
}
答案 0 :(得分:3)
要么:
public int countFirstNameOccurrences(char c) {
String character = String.valueOf(c); // character represented as a String
return Reg.stream() // Stream<Name>
.map(Name::getFirstName) // Stream<String>
.mapToInt(n -> n.endsWith(character)? 1 : 0) // IntStream
.sum(); // int
}
或正如Alexis所建议的那样,但您需要转发int
,因为count
会返回long
类型。
public int countFirstNameOccurrences(char c) {
return (int)Reg.stream() //Stream<Name>
.map(Name::getFirstName) // Stream<String>
.filter(n -> n.charAt(n.length() -1) == c) // Stream<String>
.count(); // long
}
答案 1 :(得分:0)
我知道你有一个接受的答案,但不幸的是有些人被迫使用低于8的Java版本,所以这里可以选择不使用流:
public static int count(char c) {
int count = 0;
for (String name : names) {
if (name.charAt(name.length() - 1) == c) {
count++;
}
}
return count;
}
简单示例here。