जावा 8 में, समकक्ष java.util.function.Function<T, R>
और java.util.function.Consumer<T>
इंटरफेस क्रमशः हैं। इसी तरह, java.util.function.Predicate<T>
System.Predicate<T>
के बराबर है। जैसा कि कहीं और बताया गया है, ये प्रतिनिधियों के बजाय इंटरफेस हैं।
तरफ संबंधित: मैं वर्तमान में LINQ की तरह विस्तार विधि चीज़ें करने निम्नलिखित उपयोगिता वर्ग पर भारी झुकाव रहा हूँ:
abstract class IterableUtil {
public static <T> Iterable<T> where(Iterable<T> items, Predicate<T> predicate) {
ArrayList<T> result = new ArrayList<T>();
for (T item : items) {
if (predicate.test(item)) {
result.add(item);
}
}
return result;
}
public static <T, R> Iterable<R> select(Iterable<T> items, Function<T, R> func) {
ArrayList<R> result = new ArrayList<R>();
for (T item : items) {
result.add(func.apply(item));
}
return result;
}
}
System.Linq.Enumerable.Where<TSource>
के विपरीत और System.Linq.Enumerable.Select<TSource, TResult>
LINQ की तरह तरीकों मैं यहाँ पेश आलसी नहीं हैं और कॉलर को परिणाम संग्रह वापस करने से पहले स्रोत संग्रह को पूरी तरह से पार करें। फिर भी, मैं उन्हें पूरी तरह से वाक्य रचनात्मक उद्देश्यों के लिए उपयोगी पाते हैं और यदि आवश्यक हो तो आलसी बना दिया जा सकता है।
class Widget {
public String name() { /* ... */ }
}
एक को देखते हुए निम्न कर सकते हैं:
List<Widget> widgets = /* ... */;
Iterable<Widget> filteredWidgets = IterableUtil.where(widgets, w -> w.name().startsWith("some-prefix"));
कौन सा मैं निम्नलिखित करना पसंद करते हैं:
List<Widget> widgets = /* ... */;
List<Widget> filteredWidgets = new ArrayList<Widget>();
for (Widget w : widgets) {
if (w.name().startsWith("some-prefix")) {
filteredWidgets.add(w);
}
}
स्रोत
2014-03-31 04:24:28
यह भी देखें http://stackoverflow.com/questions/7296606/what-is-the-closes टी-चीज-जावा-टू-द-नेट-फंक-एंड-एक्शन-प्रतिनिधि – nawfal