2014-10-21 46 views
1

我有一個對象循環在Java中的列表來檢查值

List<myObj> myObjList 

下面的列表,MyObj中是具有以下結構的類:

public class myObj { 
    private String id; 
    private String pwd; 
    private String type; 
    //Getters/Setters 
} 

我要循環通過列表來檢查,如果我有一個特定的ID。我試過:

for (obj : myObjList) { 
    if (MY_STRING.equals(obj.getId())) { 
     aBooleanFlag = true; 
    } 
} 

但是,當我想使用,包含方法,它是失敗的。我使用它的方式是:

if(myObj.contains(MY_STRING)) { 
    aBooleanFlag = true;  
}   

您能否提供什麼是錯的,如何解決它

+0

嘗試(myObj.getID()包含(MY_STRING)){ aBooleanFlag = TRUE; } – Riadh 2014-10-21 22:00:17

+0

你的第一個版本有什麼問題?當然,當你得到一場比賽時,它需要一個'休息'聲明。 – EJP 2014-10-21 22:00:21

+0

你的意思是myObjList.contains(MY_STRING)而不是myObj.contains(MY_STRING)? – Riadh 2014-10-21 22:05:58

回答

3

.contains()檢查列表中的任何對象是否等於參數。

A myObj實例永遠不會等於String

+0

多數民衆贊成我懷疑。那麼有沒有其他的方法來循環對象?任何示例代碼? – CodeMonkey 2014-10-21 21:58:53

+2

如果'equals()'方法被正確寫入,'myObj'實例確實可以等於'String'。 – EJP 2014-10-21 22:01:04

+0

如果你想使用contains,你需要創建一個「id」列表 – Riadh 2014-10-21 22:03:25

0

變化

if(myObj.contains(MY_STRING)) { 
    aBooleanFlag = true;  
} 

if (myObj.getId().contains(MY_STRING)) { 
     aBooleanFlag = true; 
    } 
+1

他想檢查他是否有一個特定的ID,而不是它是否包含在另一個ID中。 – EJP 2014-10-21 22:13:42

+0

@EJP,然後在循環中使用obj.getId()。equals(MY_STRING) – spudone 2014-10-21 22:15:47

+0

因此,更好的方法是他使用equals或equalsIgnoreCase,就像他在代碼中所寫的那樣 – esprittn 2014-10-21 22:20:16

-2

你應該使用Map代替List.

+0

您需要多一組括號。此外,這違反了['equals contract']的* symmetric *子句(http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang。目的-) – 2014-10-21 22:20:29

0

在你的循環使用.equals(Object)
如果你想比較2字符串,你應該使用.equalsIgnoreCase(String)
你也可以定義什麼obj。
因此,這將是你的代碼:如果您使用的方法是否

for (Object obj : myObjList) { 
    if (MY_STRING.equalsIgnoreCase(obj.getId())) { 
     aBooleanFlag = true; 
    } 
} 

,你應該檢查列表包含字符串。
檢查一個類是否包含String不會有幫助。
所以,你的代碼將有:

if(myObjList.contains(MY_STRING)) { 
    aBooleanFlag = true;  
} 

希望它幫助

0

您比較一個String使用equals整個MyObj對象。這就像詢問你的車是否與輪轂蓋相同(你的車的一部分)。

您可以在列表上迭代:

boolean found = false; 
for (MyObj obj : myObjList) { 
    if (obj.getId().equals(MY_STRING)) { 
     found = true; 
     break; 
    } 
} 

或者你可以使用Java 8流與anyMatch()和謂詞:

boolean found = myObjList.stream().anyMatch(obj -> obj.getId().equals(MY_STRING)); 

或者你可以使用一個Map代替List,並按ID查找項目:

Map<String, MyObj> theMap = new HashMap<>(); 
// put MyObj's into the map by id 
theMap.put(myObj.getId(), myObj); 
// check for one using its id 
boolean found = theMap.containsKey(MY_STRING); 

我將課程名稱從myObj更改爲MyObj,因爲慣例是類名以Java中的大寫字母開頭。如果