2016-05-04 15 views
0

まあ、私の質問はこれです。arraylistオブジェクトが存在するかどうかを調べる

私のクラスのメッセージが含まれています: - ID - メッセージ - [ユーザー]

私のクラスのユーザーが含まれています - ID - これは私が情報を追加する方法です

に名前を私のarrayListに:http://pastebin.com/99ZhFASm

私はarrayListを持っていますh id、message、Userを含んでいます。

私は私のArrayListが既に

注「ユーザー」のIDが含まれているかどうかを知りたい:あなたはユニーク持つオブジェクトMessageを持っているので、すでにarraylist.contains

(アンドロイド)

+0

arrayListはどのように設定されていますか?一般的なパターンに従わない限り、リストには異なるオブジェクトを含めることはできません。 id、message、およびuserオブジェクトを保持するコンテナクラスがいくつかありますか?または、あなたはメッセージのArrayListを持っていると言っていますか? – zgc7009

+0

これは私が私のArrayListに情報を追加する方法です\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t http://pastebin.com/99ZhFASm – Jorge

答えて

0

てみましたが識別子(id)、ArrayListに配置しないでください。HashMapまたはHashSetを使用してください。しかし、最初に、あなたが同じ方法を(作成する必要があります)とhashCode()そのオブジェクトに:

@Override 
public boolean equals(Object o) { 
    if (this == o) return true; 
    if (o == null || getClass() != o.getClass()) return false; 

    Message message = (Message) o; 

    return id == message.id; 

} 

@Override 
public int hashCode() { 
    return id; 
} 

このように、あなたはマップとセットの利点を使用することができます。だから、次の操作を行います。

User user = new User(); 
user.setId(1); 
user.setName("stackover"); 

Message msg = new Message(); 
msg.setid(10); 
msg.setmessage("hi"); 
msg.setUser(user); 

HashMap<Integer, Message> map = new HashMap<>();     
map.add(new Integer(msg.getId()), msg); 

boolean isItInMapById = map.containsKey(new Integer(10)); 
boolean isItInMapByObject = map.containsValue(msg); 

あなたがメッセージのArrayListが必要な場合は、ちょうどこの操作を行います。

ArrayList<Message> messages = new ArrayList<>(map.values()); 

あなたはそれが必要な場合あなたはまた、IDのリストを取得することができます。

List<Set<Integer>> idList = Arrays.asList(map.keySet()); 
+0

こんにちはアドナン、あなたの答えに感謝しかし、 Arrays.asList(arrayList).contains(user)[ユーザは私のオブジェクトにユーザIDと名前が含まれているためです]が動作しませんでしたが、 – Jorge

+0

はどちらの方法で動作していますか?それが見つからない、またはエラーが発生した場合(スタックトレースを提供してください) –

+0

私はこれをテストに使用しており、常に "NOT"です。http://pastebin.com/zV6sSuqJ – Jorge

0
arrayList.stream().anyMatch(item.id == user.id) 
0

Java 8を使用している場合、次のようなコードを書くことができます。

ID theIdWeAreMatchingAgainst = /*Whatever it is*/; 
boolean alreadyHasId = 
    list 
    .stream() 
    .anyMatch(m -> m.getId() == theIdWeAreMatchingAgainst); 

そして、あなたが実際にそのIDを持つメッセージ[-s]を、必要な場合は

Message[] msgs = 
    list 
    .stream() 
    .filter(m -> m.getId() == theIdWeAreMatchingAgainst) 
    .toArray(Message[]::new); 
Message msg = msgs[0]; 

は、Java 7を使用している場合、あなたはそれを古い方法を行う必要があるでしょう:

public static List<Message> getMessage(ID id, List<Message> list) { 
    List<Message> filtered = new ArrayList<Message>(); 
    for(Message msg : list) { 
     if(msg.getId() == theIdWeAreMatchingAgainst) filtered.add(msg); 
    } 
    return filtered; 
} 
0

あなたの質問とあなたのコードはお互いに一致していないようです。 MessagesにはArrayListがあります。ここで、MessagesにはID、メッセージ文字列、およびユーザーオブジェクトが含まれています。あなたはそのメッセージにIDを適用しているだけでなく、別のIDをユーザーに適用しています。 ArrayListにIDと一致するものがあることを確認するには、2つの方法があります。

あなたはこの

boolean matchMessageId = true; 
int idToMatch = [some_id]; 
for(Message message : arrayList){ 
    int currId = matchMessageId? mesage.id: message.user.id; 

    if(currId == idToMatch){ 
     return true; 
    } 
} 
return false; 

このような何かを行うことができ、しかし、HashMapのまたは潜在的SparseArrayのようなものに適しだろう何かのように思えます。

関連する問題