Pow*_*wer -1 java replace for-loop java-stream
我只是好奇我是否可以切换它
for (String arg : args) {
int number = Integer.parseInt(arg);
int checksum = 0;
for (int digits = 0; digits < 10; digits++) {
checksum += number % 10;
number /= 10;
}
System.out.println(checksum);
}
}
Run Code Online (Sandbox Code Playgroud)
到一个管道Java流(只有那个条件,没有递归方法等).
我的第一次尝试是
public static void main(String... args) {
Stream.of(args)
.?
}
Run Code Online (Sandbox Code Playgroud)
然后以某种方式使用如下函数:
class FunctionTest implements Function<String, Integer> {
@Override
public Integer apply(String s) {
int number = Integer.parseInt(s);
int checksum = 0;
IntStream.range(1,10).reduce(number, ()-> ?)
checksum += number % 10;
number /= 10;
return checksum;
}
}
Run Code Online (Sandbox Code Playgroud)
但我想我已经走到了尽头......
有人有更好的想法还是实际上不可能?
Arrays.stream(args)
.map(Integer::parseInt)
.map(number -> {
int sum = 0;
for(int i = 0; i < 10; i ++) {
sum += number % 10;
number /= 10;
}
return sum;
})
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
或可替换地(注意:这会不会为负数工作):
Arrays.stream(args)
.map(number -> number.split(""))
.map(Arrays::stream)
.map(strStream -> strStream.mapToInt(Integer::parseInt))
.map(IntStream::sum)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
这个将字符串拆分为单独的字符串,将它们映射到整数然后对它们求和
最后,也是一个正数唯一的解决方案:
Arrays.stream(args)
.map(CharSequence::chars)
.map(chars -> chars.map(Character::getNumericValue))
.map(IntStream::sum)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)