Max Spencer
Max Spencer

Reputation: 1719

Better way to map from String constants to int constants in Java

I have a load of images of musical symbols which I need to do some processing on and for each one I need to get the integer code corresponding to its file name. There are 23 possible file name strings and 23 integer code and there are many images with the same name under different directories.

The solution I have so far is given (abbreviated) below. I have just defined a load of int and String constants and then written a method which is just a huge chain of if statements to do the translation.

What would be a better way to achieve the same effect? The way I've done it seems really awful! I thought about using some kind of Map, but I wasn't sure of the best way to do so.

public class Symbol {
    public static final int TREBLE_CLEF = 0;
    public static final int BASS_CLEF = 1;
    public static final int SEMIBREVE = 2;
    // ...

    public static final String S_TREBLE_CLEF = "treble-clef";
    public static final String S_BASS_CLEF = "bass-clef";
    public static final String S_SEMIBREVE = "semibreve";
    // ...

    public static int stringCodeToIntCode(String strCode) {
        if (strCode == S_TREBLE_CLEF) {
            return TREBLE_CLEF;
        } else if (strCode == S_BASS_CLEF) {
            return BASS_CLEF;
        } else if (strCode == S_SEMIBREVE) {
            return SEMIBREVE;
        } //...

        else {
            return -1;
        }
    }
}

Upvotes: 0

Views: 1229

Answers (3)

Bhavik Shah
Bhavik Shah

Reputation: 5183

how about a hashmap

HashMap<String,Integer> hm=new HashMap<String,Integer();
hm.put("treble-clef",0);
//rest

and get it by using this

int value=hm.get("treble-clef");

Upvotes: 0

kosa
kosa

Reputation: 66637

I think you are looking for Enum where you can have String constant and its value.

Example:

public enum YourEnumClass{
    STRING_CONST (5),
    STRING_CONST2 (7),
    .....
     //constructor
     //getValue() method
}

read linked tutorial for more details.

Upvotes: 4

Narendra Pathai
Narendra Pathai

Reputation: 41945

enum StringToInt{
  TREBLE_CLEF(0),

  ......
}

Enum is the way to go.

Another example:

public enum Color {
 WHITE(21), BLACK(22), RED(23), YELLOW(24), BLUE(25);

 private int code;

 private Color(int c) {
   code = c;
 }

 public int getCode() {
   return code;
 }

Upvotes: 1

Related Questions