转换为循环到流的双倍?

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)

但我想我已经走到了尽头......

有人有更好的想法还是实际上不可能?

exp*_*plv 6

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)