检查是否存在arraylist对象

时间:2016-05-04 16:06:48

标签: java android arraylist exists

好吧,我的问题是这个。

  

我的课程消息包含:    - ID    - 信息     - [用户]

     

我的班级用户包含:    - ID     - 姓名

这是我向我的arrayList添加信息的方式:http://pastebin.com/99ZhFASm

我有一个包含id,message,User的arrayList。

我想知道我的arrayList是否已包含id“user”

注意:已经尝试过arraylist.contains

(机器人)

4 个答案:

答案 0 :(得分:0)

由于您的对象Message具有唯一标识符(id),因此请勿将其放在ArrayList中,使用HashMapHashSet。但首先,您需要在该对象中创建方法equal()和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;
}
通过这种方式,您可以使用map和set的优点。所以,这样做:

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());

答案 1 :(得分:0)

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

答案 2 :(得分: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;
}

答案 3 :(得分:0)

所以你的问题和你的代码似乎并不相互对应。您有一个消息的ArrayList,其中Messages包含ID,消息String和用户Object。您正在为该消息应用ID,以及向用户应用另一个ID。您希望确保ArrayList与ID匹配,有两种方法可以执行此操作。

你可以做这样的事情

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之类的东西。