web-dev-qa-db-fra.com

Java - Trouver un élément dans un tableau à l'aide de Condition et Lambda

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?

20
Joe Almore

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 Optionalhere .

36
CoderCroc

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.

21
Robby Cornelissen

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
8
Andreas