2016-08-05 23 views
-2

Ich versuche, eine Enumeration in einem Prädikat zu durchlaufen, um die richtigen Werte zurückzugeben, die ich brauche.Iterieren über ein Enum in einem Prädikat?

Hier ist, was ich tun würde:

private Predicate<Item> isCorrectItem() { 
    for (Thing thing : Thing.values()) { 
     return item -> item.getId() == thing.getNumber(); 
    } 
} 

außer Java eine Rückkehr außerhalb der Schleife aswell will. Wenn ich nach der Schleife null zurückgebe, würde mir das nichts nützen. Ich frage, was kann ich tun, um entweder zu vermeiden, zweimal zurückzukommen oder zu vermeiden, über das Enum zu iterieren? Und wenn nicht, was sollte ich zurückgeben?

+0

Es ist überhaupt nicht klar, was Sie Ihr Prädikat tun möchten. Soll damit festgestellt werden, ob * irgendwelche * Dinge den Wert des Gegenstandes haben? Gibt es einen Grund, warum Sie kein "HashSet " (oder was auch immer) für alle "Ding-Nummern" haben wollen? –

Antwort

0

Wenn die Item korrekt ist, wenn es hat eine passende number im enum Thing Sie

private Predicate<Item> isCorrectItem() { 
    return item -> Arrays.stream(Thing.values()).anyMatch(thing -> thing.getNumber() == item.getId()); 
} 
+0

Genau das, was ich gesucht habe, danke. – andrewDev15

0

@ garnulf Antwort verwenden kann (oder @ Tunaki das?) Richtig ist, aber nur für den Kontext, dann ist hier, was Sie wahrscheinlich gemeint in Ihrer Frage:

private Predicate<Item> isCorrectItem() { 
    return item -> { 
     for (Thing thing : Thing.values()) { 
      if (item.getId() == thing.getNumber()) { 
       return true; 
      } 
     } 
     return false; 
    }; 
}