2015-08-28 15 views
10

In breve, ho questo codice, e mi piacerebbe ottenere un elemento specifico dell'array usando una condizione e lambda. Il codice dovrebbe essere qualcosa del tipo:Java - Trova elemento nell'array usando Condition e Lambda

Preset[] presets = presetDALC.getList(); 
Preset preset = Arrays.stream(presets).select(x -> x.getName().equals("MyString")); 

Ma ovviamente questo non funziona. In C# sarebbe qualcosa di simile ma in Java, come faccio?

risposta

15

si può fare in questo modo,

Optional<Present> optional = Arrays.stream(presents) 
            .filter(x -> "MyString".equals(x.getName())) 
            .findFirst(); 

if(optional.isPresent()) {//Check whether optional has element you are looking for 
    Present p = optional.get();//get it from optional 
} 

Si può leggere di più su Optionalhere.

8

Ti piace questa:

Optional<Preset> preset = Arrays 
     .stream(presets) 
     .filter(x -> x.getName().equals("MyString")) 
     .findFirst(); 

Questo restituirà un Optional che potrebbe o non potrebbe contenere un valore. Se si vuole sbarazzarsi del Optional tutto:

Preset preset = Arrays 
     .stream(presets) 
     .filter(x -> x.getName().equals("MyString")) 
     .findFirst() 
     .orElse(null); 

L'operazione filter() è un'operazione intermedia, che restituisce un flusso pigro, quindi non c'è bisogno di preoccuparsi per l'intero array viene filtrato anche dopo si incontra una corrispondenza.

4

Vuoi la prima corrispondenza o tutte le corrispondenze?

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); 

uscita

[C, CA] 
C