Unfortunetly il n'y a pas moyen d'éviter soit une sorte de chèque ou une valeur par défaut (comme cela a été déjà écrit dans les réponses précédentes). Cela dit, il existe une bonne façon de faire des chèques avec des options. Laisse moi te donner un exemple. J'ai créé une classe simple pour les tests.
class ExampleData
{
private String name;
private int value;
public ExampleData(String name, int value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public int getValue() {
return value;
}
@Override
public String toString() {
return "ExampleData{" +
"name='" + name + '\'' +
", value=" + value +
'}';
}
}
Maintenant, écrivez une méthode de test simple.
public void testApp()
{
ArrayList<ExampleData> array = new ArrayList<>(Arrays.asList(
new ExampleData("TestName", 1),new ExampleData("TestName1", 2)));
Optional<ExampleData> min = array
.stream()
.min(Comparator.comparingInt(ExampleData::getValue));
min.ifPresent(System.out::println);
}
Notez que je n'ai pas utilisé immédiatement get()
. Au lieu de cela j'ai utilisé la méthode ifPresent
quand je voulais extraire la valeur. Je ne sais pas si vous avez déjà utilisé le langage C# mais cette approche me rappelle l'opérateur ?
de C#.
en C# vous suffit de faire quelque chose comme ça
String name = possibllyNullValue?.getName();
donc ici en Java que vous pouvez faire quelque chose de similaire avec ifPresent()
Bien sûr ifPresent
retourne void il peut être gênant dans certains cas.
Vous auriez besoin d'utiliser 'orElse (null)' au lieu de 'get()'; mais pourquoi déballer et re-emballer immédiatement l'option? –
Mon mauvais, est allé avec le code OP et essayé de l'envelopper dans 'Optional ', corrigé maintenant –