2012-10-02 202 views
1

我有一個具有字段列表和is_searchable數據具有遍歷列表

field_id i_searchable 
1234  1 
2344  0 
4553  1 

我正在遍歷該列表檢查數據是否是搜索,然後返回true,否則返回false

public boolean validate() { 
     LOGGER.info("in validate"); 
     boolean isSearchValue = false; 
     LOGGER.info("is isSearchable" + fieldList.size()); 
     for (Field formFieldValMap : fieldList) { 
      if (formFieldValMap.getIsSearchableField().equals("0")) { 

       isSearchValue = false; 
      } else { 
       isSearchValue = true; 
      } 
     } 

     return isSearchValue; 
    } 

的上面的函數返回true,它應該返回false。如果列表中has_searchable中的所有數據都有1,那麼只有它應該返回true。

+1

只是一個提示:使用' 「0」 .equals(formFieldValMap.getIsSearchableField())'防止ocasional NullPointerException異常 –

+1

@RenatoLochetti除非你知道在列表中的值不爲空。參見[Yoda條件](http://wiert.me/2010/05/25/yoda-conditions-from-stackoverflow-new-programming-jargon-you-coined/)。 –

回答

4

可能是另一種方式是假設列表中全是1。只要您看到0並從循環中返回,就將它設置爲false。

boolean isSearchValue = true; 


    for (Field formFieldValMap : fieldList) { 
       if (formFieldValMap.getIsSearchableField().equals("0")) { 

        isSearchValue = false; 
        return; 
       } 
      } 

注:您可能需要照顧的其他情況喜歡什麼做的,如果列表爲空等等,

+0

根據列表的大小,從循環內部返回false可能是值得的。但是,答案的價值在於你有一個單一的出口點。 –

+0

@TimPote:當您在評論中輸入內容時,我正在更新答案。 – kosa

+1

應該是「休息」嗎? – Marcus

0

您的代碼只是告訴最後一個元素是否不等於「0」。如果你想完成循環

public boolean validate() { 
     LOGGER.info("in validate"); 
     boolean isSearchValue = false; 
     LOGGER.info("is isSearchable" + fieldList.size()); 
     for (Field formFieldValMap : fieldList) { 
      if (formFieldValMap.getIsSearchableField().equals("0")) { 

       return false; //if any 
      } 
     } 

     return true; 
    } 
1

boolean isSearchValue = true; 
for (Field formFieldValMap : fieldList) { 
    isSearchValue &= formFieldValMap.getIsSearchableField().equals("1"); 
} 
return isSearchValue; 

否則:使用此

for (Field formFieldValMap : fieldList) { 
    if (formFieldValMap.getIsSearchableField().equals("0")) { 
     return false; 
    } 
} 
return true; 
+0

這個的優點是它有可能將你從[分支預測失敗]中拯救出來(http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than -an-無序陣列)。除非你測試它,否則它永遠不會確定。 –

0

我有點遲到了,但對於未來的讀者誰正在使用Java 8可以使用流式API來解決這個問題。

public boolean validate() { 
    return fieldList.stream().map(Field::getIsSearchableField).allMatch("1"::equals); 
}