非常小的代码优化

时间:2017-03-24 00:24:59

标签: java

  while (i < a.size() && value2.substring(0, prefix.length()).compareTo(prefix) == 0) {
        value2 = a.get(i);

        if (value2.endsWith(suffix)) {
            counter++;
            setter = true;

        }

        i++;

    }

我只是想知道是否有办法避免在我的代码中使用两次get()方法。我现在的问题是我需要在之前分配值2,以便我的while循环工作,但我还需要在while循环中更新它。

4 个答案:

答案 0 :(得分:3)

也许这就是你所需要的:

for (String value : a) {
        if (!value.startWith(prefix)) break;
        if (value.endsWith(suffix)) {
            counter++;
            setter = true;
        }
    }

如果a不可迭代:

        while(i < a.size()){
        String value = a.get(i);
        if (!value.startsWith(prefix))
            break;
        if(value.endsWith(suffix)){
            counter++;
            setter = true;
        }
        i++;
    }

答案 1 :(得分:1)

        while(i <a.size()){
            value2 = a.get(i);
            if(value2.substring(0,prefix.length()).compareTo(prefix)!=0){
                break;
            }
            if(value2.endsWith(suffix)){
                counter++;
                setter = true;

            }
            i++;
       }

答案 2 :(得分:0)

这类似于关于not being able to assign in conditions的Python问题;我们可以使用while(true) if () break;惯用语 - 实际上,我们无法执行while (true),因为我们会在i == a.size()上崩溃,因此我们会将代码拆分为whileif

while (i < a.size())
{
    String value2 = a.get(i);
    if (value2.substring(0, prefix.length()).compareTo(prefix)==0)
    {
        if(value2.endsWith(suffix)){
            counter++;
            setter = true;
        }
    }
    else
    {
        break;
    }
    i++;
}

(哦,请尝试使用常规缩进级别格式化代码;它使得事情变得更容易,不仅仅是我们,还有你。)

继续下面的评论,人们也可以做得更短,但在我看来更难以阅读:

String value2;
while (i < a.size() && (value2 = a.get(i)).substring(0, prefix.length()).compareTo(prefix)==0)
{
    if(value2.endsWith(suffix))
    {
        counter++;
        setter = true;
    }
    i++;
}

在这种情况下,如果在第二个表达式的中间进行赋值,我认为读者很容易忽略。

答案 3 :(得分:0)

在java8中,你可以像这样使用stream

    counter = a.stream()
           .filter(s -> s.startsWith(prefix))
           .filter(s -> s.endsWith(suffix))
           .count();
    setter = counter > 0;