我是初学程序员。
我对返回boolean
值的方式有疑问。
1
public boolean methodA(List<String> targetList){
boolean result = false;
for(String str : targetList){
if(str.equals("word1")) {
result = true;
break;
}
if(str.equals("word2")) {
result = true;
break;
}
}
return result;
}
2
public boolean methodB(List<String> targetList){
boolean result = false;
for(String str : targetList){
if(str.equals("word1")) {
return true;
}
if(str.equals("word2")) {
return true;
}
}
return result;
}
答案 0 :(得分:4)
一旦你的代码变得非常庞大,这就是你最终要做的事情:
public boolean methodB(List<String> targetList)
{
for(String str : targetList)
if(str.equals("word1") || str.equals("word2"))
return true;
return false;
}
答案 1 :(得分:4)
public boolean methodABC(List<String> list) {
return list.contains("word1") || list.contains("word2");
}
答案 2 :(得分:1)
使用流,一个非常简单的单行:
public boolean methodA(List<String> targetList){
return targetList.stream().anyMatch(s -> s.equals("word1") || s.equals("word2"));
}
答案 3 :(得分:0)
第二种方法更好,因为如果找到搜索词,就不会浪费时间浏览其他值。
最好的方法是:
public boolean methodC(List<String> list) {
for (String str : list)
if (str.equals("word1") || str.equals("word2")) return true;
return false;
}
或者在Java 8 / 1.8中:(如果这是错误的话,请纠正我!)
public boolean methodD(List<String> list) {
yes: {
list.forEach(str -> {if(str.equals("word1") || str.equals("word2")) break yes;});
return false;
}
return true;
}
答案 4 :(得分:0)
methodA()
是好的,因为它遵循单入口/单出退出的结构化编程,只迭代列表一次。
methodA()
已清理:
public static boolean methodA(List<String> targetList) {
boolean result = false;
for(String str : targetList){
if(str.equals("word1") || str.equals("word2")) {
result = true;
break;
}
}
return result;
}
methodB()
很好,因为它只有几行,在列表上迭代一次,占用更少的内存(不使用结果boolean
,非常小的内存保存),成功后立即返回。
methodB()
已清理:
public boolean methodB(List<String> targetList){
for(String str : targetList){
if(str.equals("word1") || str.equals("word2")) {
return true;
}
}
return false;
}
在了解了流之后,在单入口/单出口结构化编程之后的单行程序,只迭代列表一次。
public static boolean methodX(List<String> targetList){
return targetList
.stream()
.anyMatch(target -> target.equals("word1") || target.equals("word2"));
}
用法:
public static void main(String[] args) throws Exception {
List<String> targets1 = new ArrayList() {{
add("hello");
add("goodbye");
}};
System.out.println(methodA(targets1));
List<String> targets2 = new ArrayList() {{
add("hello");
add("goodbye");
add("word1");
}};
System.out.println(methodA(targets2));
List<String> targets3 = new ArrayList() {{
add("hello");
add("goodbye");
add("word2");
}};
System.out.println(methodA(targets3));
}
结果:
false
true
true
关于性能,它们都只遍历列表一次,所以IMO只是归结为个人偏好,哪个最好用。对我自己来说,这将是methodX()