En bref, j'ai ce code, et j'aimerais obtenir un élément spécifique du tableau en utilisant une condition et lambda. Le code ressemblerait à ceci:
Preset[] presets = presetDALC.getList();
Preset preset = Arrays.stream(presets).select(x -> x.getName().equals("MyString"));
Mais évidemment, cela ne fonctionne pas. En C # serait quelque chose de similaire, mais en Java, comment puis-je faire cela?
Vous pouvez le faire comme ça,
Optional<Preset> optional = Arrays.stream(presets)
.filter(x -> "MyString".equals(x.getName()))
.findFirst();
if(optional.isPresent()) {//Check whether optional has element you are looking for
Preset p = optional.get();//get it from optional
}
Vous pouvez en savoir plus sur Optional
here .
Comme ça:
Optional<Preset> preset = Arrays
.stream(presets)
.filter(x -> x.getName().equals("MyString"))
.findFirst();
Cela retournera un Optional
qui pourrait ou non contenir une valeur. Si vous voulez vous débarrasser complètement de Optional
:
Preset preset = Arrays
.stream(presets)
.filter(x -> x.getName().equals("MyString"))
.findFirst()
.orElse(null);
L'opération filter()
est une opération intermédiaire qui renvoie un flux lazy. Vous n'avez donc pas à vous soucier de la totalité du tableau filtré, même après la correspondance.
Voulez-vous d'abord faire correspondre, ou tous faire correspondre?
String[] presets = {"A", "B", "C", "D", "CA"};
// Find all matching
List<String> resultList = Arrays.stream(presets)
.filter(x -> x.startsWith("C"))
.collect(Collectors.toList());
System.out.println(resultList);
// Find first matching
String firstResult = Arrays.stream(presets)
.filter(x -> x.startsWith("C"))
.findFirst()
.orElse(null);
System.out.println(firstResult);
sortie
[C, CA]
C