很想知道在Java 8中是否有更优雅的方法来尝试查找字符串中奇数位置的数字总和。
这是我目前的职能
/**
* Explode string into char array, get sum of ASCII values at odd positions and divide by 10 to convert
* to the integer value from that character
* @param ccNumber string
* @return int sum
*/
int calculateSumOfOddDigits(final String ccNumber) {
final char[] digits = ccNumber.toCharArray();
return (digits[0] + digits[2] + digits[4] + digits[6] + digits[8] + digits[10] + digits[12] + digits[14]) / 10;
}
仍然不熟悉Streams和Java 8,并认为你可以这样做:
ccNumber.chars().mapToObj(x -> (char) x {
..add odd position digits
})
欢迎任何建议。
答案 0 :(得分:8)
这样的事情:
String str = "01234";
Integer sum = IntStream.range(0, str.length())
.filter(i -> i % 2 == 0)
.map(str::charAt)
.sum();
System.out.println(sum);
答案 1 :(得分:3)
问题是:如果你想过滤索引,那么转换为字符流是没用的,因为你丢失了索引信息。
但是,您可以将索引视为流,并使用.map()将其转换为char值。像这样的东西:call_user_func_array
IntStream.range(0, ccNumber.length())
.filter(i -> i % 2 == 0)
.map(i -> ccNumber.charAt(i))
.collect(Collectors.sum());
不确定这是否正常,但你明白了。
另外:这并不像简单的for循环那样有效,所以我不会那么麻烦这样做。
答案 2 :(得分:2)
Instream.range(0, str.length())
.filter(i -> i % 2 == 0)
.map(i -> str.charAt(i))
.sum();