如何在java中存储和比较唯一对?哪种数据结构有用?

时间:2017-01-29 11:26:05

标签: java collections hashmap

我有一个通知对象列表,它的名字是通知。我将它映射到HashMap:

"IM" : "+928292929"
"IM" : "test@yahoo.com"

我的通知列表具有两个不同的值,用于" IM" :

assertEquals(recipientByMedia.get("IM"), contact.getSmsNumber());
assertEquals(recipientByMedia.get("IM"), contact.getImAddress());

我知道,HashMap会覆盖新的" IM"相反,最古老的。最后,我想使用这个HashMap来使用" Mockoto.assertEqual"像这样:

const styles = StyleSheet.create({
  container: {
    position: 'absolute',
    top: 0,
    left: 0,
    right: 0,
    bottom: 0
  },
  map: {
    position: 'absolute',
    top: 0,
    left: 0,
    right: 0,
    bottom: 0,
    width: 200,
    height: 200
  },
});

其中一项测试将失败。我怎样才能比较" IM"在我的测试?我可以使用哪种数据结构代替HashMap?

3 个答案:

答案 0 :(得分:1)

我认为,这是哈希映射的一个特征,它在域和范围之间建立一对一的关系。

我建议你制作不同的钥匙。像

assertEquals(recipientByMedia.get("IM0"), contact.getSmsNumber());
assertEquals(recipientByMedia.get("IM1"), contact.getImAddress());

答案 1 :(得分:1)

由于课程Notification似乎是单一的事实来源,为什么你需要不同的数据结构?你想用Map做什么?

如果要查找列表中Notification对象的属性getMedia,请说"IM",您只需过滤列表并直接从对象访问属性那是为了保存这种信息:

String recipient = notifications.stream()
  .filter(n -> "IM".equals(n.getMedia()))
  .findFirst()
  .orElseThrow(() -> new IllegalArgumentException(/* not in the list */))
  .getRecipient();

如果不是这种情况并且您想要从多个来源撰写数据,请创建POJO以获取保存必要信息的确切目的,或者只使用2个数据源获取组合信息(如果是出于某种目的更具可读性。

答案 2 :(得分:0)

使用setter和getter创建一个Model,然后使用ArrayList而不是像这样private ArrayList<StudentsDetail> arraylist;的Hashmap,然后在for循环中添加这个arraylist.add(new StudensDetail(obj.getMedia(), obj.getRecipient()));,当你想获取值时,在你的内部写下这个代码for loop id = arraylist.get(i).getId();

这是模型

public class StudentDetails {
private String name;
private String id;

public StudentDetails(String name, String id) {
    this.name = name;
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

}