2015-08-28 13 views
10

का उपयोग करके ऐरे में तत्व खोजें, संक्षेप में, मेरे पास यह कोड है, और मैं एक शर्त और लैम्ब्डा का उपयोग करके सरणी का एक विशिष्ट तत्व प्राप्त करना चाहता हूं। कोड इस तरह कुछ होगा:जावा - हालत और लैम्बडा

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

लेकिन जाहिर है यह काम नहीं करता है। सी # में कुछ समान होगा लेकिन जावा में, मैं यह कैसे कर सकता हूं?

उत्तर

15

आप

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 
} 

आप Optionalhere के बारे में अधिक पढ़ सकते हैं इस तरह से कर सकते हैं,।

8
इस तरह

:

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

यह एक Optional जो या एक मूल्य के न हों सकता है वापस आ जाएगी। आप Optional पूरी तरह से छुटकारा पाने के करना चाहते हैं:

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

filter() आपरेशन एक मध्यवर्ती आपरेशन जो एक आलसी धारा देता है, इसलिए पूरे सरणी फ़िल्टर किए जा रहे के बाद भी एक मैच का सामना करना पड़ा है के बारे में चिंता करने की कोई जरूरत नहीं है।

4

क्या आप पहले मिलान करना चाहते हैं, या सभी मेल खाते हैं?

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

आउटपुट

[C, CA] 
C 
संबंधित मुद्दे