【发布时间】:2015-11-08 08:42:43
【问题描述】:
我正在尝试借助 Java 8 中的 Stream API 验证 IMEI 号码。
private void ValidateIMEI() {
field //a field holding an IMEI Number
.getText().chars()
.map(this::ConvertASCIIToNumer);
}
我被卡住的部分是将偶数加倍并除以 10。
最初,我尝试了传统的 for 循环:
private void ValidateIMEI() {
int[] numbers = field //a field holding an IMEI Number
.getText().chars()
.map(this::ConvertASCIIToNumer).toArray();
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
//Double the even number and divide it by 10. add quotient and remainder
if ((numbers[i]+1) % 2 == 0) {
numbers[i] = numbers[i] * 2;
numbers[i] = numbers[i] / 10 + numbers[i] % 10;
}
sum += numbers[i];
}
if (sum%10==0) {
status.setText("Valid");
}
else{
status.setText("InValid");
}
}
但是代码被破坏了,特别是使用了我不想要的 For 循环。
那么,任何人都可以帮助在 Java 8 中仅使用 Stream API 实现 Luhn algorithm 吗?
ConvertASCIIToNumer 的代码:
private int ConvertASCIIToNumer(int value) {
return Character.digit(value, 10);
}
【问题讨论】:
标签: java algorithm java-8 java-stream