Anstatt Schleifen und sich mit komplizierten Gleichheitsbedingungen zu verwickeln, warum nicht ein wenig Java 8 auf dieses Problem anwenden?
public enum ProgramOfStudy {
ComputerScience("CS"), AutomotiveComputerScience("ACS"), BusinessInformatics("BI");
public final String shortCut;
private static final Map<String, ProgramOfStudy> shortCutMap = Collections.unmodifiableMap(new HashMap<>() {
{
Arrays.stream(ProgramOfStudy.values()).forEach(v -> put(v.shortCut, v));
}
});
ProgramOfStudy(String shortCut) {
this.shortCut = shortCut;
}
public static ProgramOfStudy getByShortCut(String shortCut) {
return shortCutMap.get(shortCut);
}
}
public static void main(String[] args) {
System.out.println(ProgramOfStudy.getByShortCut("CS"));
System.out.println(ProgramOfStudy.getByShortCut("ACS"));
System.out.println(ProgramOfStudy.getByShortCut("baasda"));
System.out.println(ProgramOfStudy.getByShortCut("BI"));
}
Wenn Sie den Code-Snippet ausführen, wird es gedruckt werden: statt einer Schleife mit String-Vergleichen
ComputerScience
AutomotiveComputerScience
null
BusinessInformatics
Es ist preferrable eine Karte in diesem Fall zu verwenden. In diesem Fall gibt es nur eine Schleife bei der Initialisierung und dann nie wieder. Es ist keine gute Idee, Schleifen mit Zeichenfolgenvergleichen bei jeder Abfrage der getByShortCut
-Methode zu verwenden.
Was Sie tun, falsch mit Ihrem Compiler denkt statt mit dem Kopf. Ändern Sie 'ProgramOfStudy.valueOf (shortCut) .equals (program)' in 'program.shortCut.equals (shortCut)'. – shmosel
Wie anders ist getByShortCut von valueOf ??? –