Java中返回布尔值的最佳方法

时间:2015-07-30 01:32:16

标签: java

我是初学程序员。

我对返回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;
}

5 个答案:

答案 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()