使用键从Map获取现有对象

时间:2013-12-13 10:49:49

标签: java collections map

对于用java(Eclipse)编写的应用程序,我创建了一个Map,用于保存自定义类的对象。

此自定义类名为Music,并具有以下构造函数:

public Music (String title, String autor, int code){
    this.setTitle(title);
    this.setAutor(autor);
    this.setCode(code);
}

这个类有3个子类:VinylCDcassette扩展它。这是CD类:

public CD(String title, String autor, String type, int code) {
    super(title, autor, code);
    this.setType(type);
}

然后,在其他名为ManageMusic的类中,我创建了一些方法和Map:

private final Map<Integer, Music> musicMap;

public ManageMusic() {
    musicMap = new HashMap<Integer, Music>();
}

如果我想向Map添加一个对象,我有一个方法,基本上在这个示例中CD会这样做:

musicItem = new CD(title, autor, format, newCode);
musicMap.put(newCode, musicItem);

所有这些案例中的代码都是一个数字,我将其称为确定的对象,将其设置为Map,删除它或从Map中获取它。

现在,我的问题是:当我想从Map获取一个对象并将其设置为String时,我这样做:

String object = musicMap.get(code).toString();

这样我就可以从Map获取对象并将其转换为String。

如果地图中不存在传递的代码,我该如何管理案例?

我如何捕获异常或做些什么来告诉用户地图中没有包含该代码的元素?

5 个答案:

答案 0 :(得分:4)

您可以使用Ternary operator ?:

String object = musicMap.get(code) != null ? musicMap.get(code).toString() : "No item found.";

修改(感谢@ user270349)

更好的方法

Music m = musicMap.get(code);
String object = (m != null) ? m.toString() : "No item found.";

答案 1 :(得分:2)

您可以检查get的返回值是否为null:

Music object = musicMap.get(code);
if (object == null) {
    // do nothing
} else {
    String str = object.toString();
}

您还可以使用containsKey()方法:

if (musicMap.containsKey(code)) {
    // your code
}

答案 2 :(得分:1)

我不确定我是否理解,但你总能做到。

Music music = musicMap.get(code);
if( music != null )
   String object = music.toString()

答案 3 :(得分:1)

您可以使用containsKey方法:

String str;
if(musicMap.containsKey(code)){
    str = musicMap.get(code);
} else {
    // do something
    // str = "some string";
}

答案 4 :(得分:0)

我建议在地图中没有与key对应的元素时抛出异常。 可以在应用程序的某处捕获此异常(取决于应用程序中异常的处理方式)此类实现允许向用户轻松显示不同类型的错误或警告消息。

Music object = musicMap.get(code);
if (object != null) {
  // do something
} else {
  throw new NoCDFoundException("no.item.found");
}