2015-08-28 21 views
10

W skrócie, mam ten kod i chciałbym uzyskać określony element tablicy przy użyciu warunku i lambda. Kod byłby mniej więcej taki:Java - Znajdź element w tablicy przy użyciu warunku i Lambda

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

Ale oczywiście to nie działa. W języku C# będzie coś podobnego, ale w Javie, jak to zrobić?

Odpowiedz

15

Można zrobić to w ten sposób,

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 
} 

Możesz przeczytać więcej o Optionalhere.

8

Jak to:

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

ta zwróci Optional który może lub nie może zawierać wartość. Jeśli chcesz pozbyć się Optional sumie:

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

Operacja filter() jest pośrednim operacja, która zwraca leniwy strumień, więc nie ma potrzeby martwić się o cały wachlarz filtrowane nawet po meczu spotyka.

4

Czy chcesz najpierw pasować, czy wszystkie pasujące?

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

Wyjście

[C, CA] 
C 
Powiązane problemy