2016-06-13 5 views
1

Ich habe die folgende Methode, wo ich ein Varargs als Eingabe übergeben. Ich versuche, HeapPollution zu vermeiden, also wollte ich neben der Anmerkung mit Suppresswarnings auch sicherstellen, dass ich bestätige, dass die Klasse jedes Arguments in meinen varargs aus den gleichen oder Nachkommen der Klasse besteht. Mein Problem ist jedoch, wenn ich finde, dass die Klassen nicht übereinstimmen, möchte ich falsch zurückgeben; Mit der ForEach-Methode (die nur void zurückgibt, kann ich einfach eine Rückgabe machen. Gibt es eine Möglichkeit, meine ForEach-Schleife durch die Rückgabe von false direkt zu verlassen. Ich möchte die erweiterte For-Schleife nicht verwenden, weil ich forEach lerne: -)] aber erreiche was ich will mit der ForEach-Methode und Lambda-Ausdruck. Gibt es überhaupt einen Weg?Wie man einen Wert von ForEach Methode von Java 8

Vielen Dank für Ihre Hilfe!

public final <T> boolean exists(T valueToCheck, @SuppressWarnings("unchecked") T... listOfPossibleValues) { 
    if (valueToCheck == null) return false; 
    Arrays.asList(listOfPossibleValues).forEach((T value) -> 
{ if (!(valueToCheck.getClass().isAssignableFrom(value.getClass()))) return;   else System.out.println(value.getClass()); }); 
    for (T value : listOfPossibleValues){ 
     if (value != null) { 
      if (value.equals(valueToCheck)) return true; 
     } 
    } 
    return false; 
} 

Antwort

1

Ich tat das unten und ich denke, das löst meinen Zweck. Natürlich nicht mit ForEach, sondern mit Streams und einem Lambda-Ausdruck.

 return Arrays.asList(listOfPossibleValues).stream().filter(value -> !(valueToCheck.getClass().isAssignableFrom(value.getClass()))).collect(Collectors.toList()).size() > 0; 
Verwandte Themen