Google संग्रह (अद्यतन: Guava) का उपयोग करते समय मेरे पास कुछ संग्रह हैंडलिंग कोड को सरल बनाने के बारे में एक प्रश्न है।क्या गुवा का उपयोग करके संग्रह को बदलने के दौरान नल को हटाने का कोई शानदार तरीका है?
मुझे "कंप्यूटर" ऑब्जेक्ट्स का एक गुच्छा मिला है, और मैं उनके "संसाधन आईडी" के संग्रह के साथ समाप्त करना चाहता हूं। यह बहुत की तरह किया जाता है:
Collection<Computer> matchingComputers = findComputers();
Collection<String> resourceIds =
Lists.newArrayList(Iterables.transform(matchingComputers, new Function<Computer, String>() {
public String apply(Computer from) {
return from.getResourceId();
}
}));
अब, getResourceId()
वापस आ सकते हैं अशक्त (और बदलते कि एक विकल्प अभी नहीं है), अभी तक इस मामले में मैं जिसके परिणामस्वरूप स्ट्रिंग संग्रह से nulls छोड़ करना चाहते हैं।
Collections2.filter(resourceIds, new Predicate<String>() {
@Override
public boolean apply(String input) {
return input != null;
}
});
आप इस तरह एक साथ यह सब डाल सकता है::
यहाँ एक तरह से nulls फिल्टर करने के लिए बाहर है
Collection<String> resourceIds = Collections2.filter(
Lists.newArrayList(Iterables.transform(matchingComputers, new Function<Computer, String>() {
public String apply(Computer from) {
return from.getResourceId();
}
})), new Predicate<String>() {
@Override
public boolean apply(String input) {
return input != null;
}
});
लेकिन यह शायद ही सुंदर, अकेले पढ़ी जा सकती है, इस तरह के एक सरल कार्य के लिए !
Collection<String> resourceIds = Lists.newArrayList();
for (Computer computer : matchingComputers) {
String resourceId = computer.getResourceId();
if (resourceId != null) {
resourceIds.add(resourceId);
}
}
एक विकल्प का उपयोग करते हुए ऊपर निश्चित रूप से भी है, लेकिन जिज्ञासा (और अधिक जानने के लिए इच्छा के चलते: वास्तव में, सादे पुराने जावा कोड (कोई फैंसी विधेय या समारोह सामान सब के साथ) यकीनन अधिक स्वच्छ होगा Google संग्रह का), क्या आप Google संग्रह का उपयोग करके कुछ छोटे या अधिक सुरुचिपूर्ण तरीके से एक ही चीज़ कर सकते हैं?
नाइस - यह सुनिश्चित नहीं है कि मैंने कभी क्यों नहीं देखा कि भविष्यवाणी विधि पहले ... –
उत्कृष्ट सलाह, धन्यवाद! Predicates.notNull() का उपयोग करना और फ़ंक्शन को स्थिर में रखना वास्तव में कोड को बहुत स्पष्ट करता है। – Jonik
ग्रेट :)। जब मैं एक रूपांतरण के रूप में एक फॉनक्शन का उपयोग करता हूं, तो मुझे इसे एक स्थिर विधि में अलग करना और इसे XXX() में नाम देना पसंद है, मुझे इसे पढ़ने में आसान लगता है। इस मामले में, यह हो सकता है: ट्रांसफॉर्म (मिलान करने वाले, inResourceId())। –