我有一种情况,我需要验证电话号码列表,并确保该列表中的每个电话号码都是有效的电话号码(其中有效的电话号码也存储在列表中)。
例如,我有一个这样的电话号码列表:
List<String> phoneNumbers = new ArrayList<String>
(Arrays.asList("0000000001", "0000000002", "0000000003"));
List<String> validPhoneNumbers = new ArrayList<String>
(Arrays.asList("0000000001", "0000000004", "0000000002"));
所以我需要验证phoneNumbers
列表中的每个电话号码都是validPhoneNumbers
的一部分。如果validPhoneNumbers
中没有任何内容,则返回false
。由于0000000003
不属于validPhoneNumbers
列表,因此该phoneNumbers
列表返回false
。
我有以下代码:
boolean phoneIsValid = false;
List<String> phoneNumbs = listOfPhoneNumbsValues;
if(phoneNumbs != null) {
List<String> listOfValidMdn = listOfValidPhoneNumbsValues;
for(String validMdn : listOfValidMdn) {
if(phoneNumbs.equals(validMdn)) {
//The problem I am facing is the following below on how should I
//store the phoneIsValid?
phoneIsValid = true;
break;
}
}
}
我面临的问题是如何存储phoneIsValid
?它应该是一个布尔数组,然后我必须在末尾进行迭代以查看它是否具有任何假值?
答案 0 :(得分:3)
您应该以相反的逻辑思考:找到至少一个无效的电话号码。
boolean atLeastOneInvalid = false;
for(String phoneNumber : phoneNumbers){
if(!validPhoneNumbers.contains(phoneNumber)){
atLeastOneInvalid = true;
}
}
// here if atLeastOneInvalid is true you know that some phone number(s) is not valid
答案 1 :(得分:1)
最简单的检查方法;
boolean allPhonesValid = validPhoneNumbers.containsAll(phoneNumbers);
现在将您的其他逻辑应用于boolean
这个allPhonesValid
参数。
使用Java8 StreamApi
;
boolean atLeastOneNumberInvalid = phoneNumbers.stream().anyMatch(phoneNumber -> !validPhoneNumbers.contains(phoneNumber));
PS:流解决方案效果很好,而不是其他性能。因为如果anyMatch查找首先不包含,则会中断。