जबकि अन्य ने पहले से ही जवाब दिया है कि क्यों Math.max
भिन्न नहीं है, उन्होंने जवाब नहीं दिया कि इस तरह की विधि क्यों नहीं बनाई जाती है जब विविध कार्य शुरू किए जाते हैं।
मैं भी यह पता नहीं (वहाँ है एक open bug-report) तो मैं केवल अनुमान लगा सकते हैं:
यह सच है कि यह Math
में लागू नहीं किया गया है, लेकिन अगर हम Collections
पर गौर निम्न विधि है:
public static <T extends Object & Comparable<? super T>> T max(
Collection<? extends T> coll) {
...
}
प्रकार हस्ताक्षर बदसूरत लग रहा है (यह काफी लचीला सहप्रसरण और contravariance संभाल करने की जरूरत है), यह आसानी से, Collections.max(Arrays.asList(-13, 12, 1337, 9));
साथ इस्तेमाल किया जा सकता सभी कार्य कार्यान्वित किया जाता है के बाद सिर्फ एक अलग जगह में।
इससे भी बेहतर: यह विधि न केवल युगल को संभाल सकती है, लेकिन Comparable
इंटरफ़ेस को लागू करने वाले सभी प्रकार।
फिर भी न तो आपके सुझाए गए समाधान, और न ही Collections
में समाधान ऑब्जेक्ट उन्मुख है, वे केवल स्थिर तरीके हैं। JDK8 साथ सौभाग्य से इस बदल जाएगा:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
int max(List<Integer> list) {
Optional<Integer> opt = list.stream().max((a,b) -> a-b);
return opt.orElse(Integer.MAX_VALUE);
}
max(Arrays.asList(-13, 12, 1337, 9)); // 1337
max(Arrays.asList()); // 2147483647
आगामी रिलीज संग्रह पुस्तकालय Project Lambda में फिर से काम कर रहा है और अधिक वस्तु उन्मुख होने के लिए। उपर्युक्त उदाहरण में, अधिकतम तत्व निर्धारित करने के लिए लैम्ब्डास का उपयोग आसान और पठनीय तरीका प्रदान करने के लिए किया जाता है। निम्नलिखित भी काम करेगा:
Arrays.asList(-13, 12, 1337, 9)
.stream()
.reduce((a,b) -> a > b ? a : b)
.ifPresent(System.out::println); // 1337
एक और विस्तार Optional
का प्रयोग होता है:
import static java.util.Comparators.naturalOrder;
Arrays.asList(-13, 12, 1337, 9)
.stream()
.max(naturalOrder())
.ifPresent(System.out::println); // 1337
के बजाय max
एक भी उच्च आदेश समारोह reduce
इस्तेमाल कर सकते हैं। ऊपर दिए गए उदाहरणों में दिखाए गए अनुसार उच्च आदेश कार्यों की संरचना के कारण त्रुटि प्रबंधन को सरल बनाने के लिए यह एक प्रकार है।
- यह वस्तु उन्मुख है
- यह बहुरूपी है:
लैम्ब्डा प्रस्ताव के कई फायदे है कि यह अनावश्यक Math.max के variadic प्रपत्र लागू करने के लिए बनाने के है। इसका मतलब यह है कि यह संग्रह (List
, Set
, Stream
, Iterator
आदि)
- यह अर्थपूर्ण और समझने के लिए
- आसान है की हर प्रकार यह ऑन-द-मक्खी बनता है की अनुमति देता है के साथ प्रयोग किया जा सकता है। बस
.parallelStream()
मठ जावा 1.0 में पेश किया गया था। 1.5 में Varargs ... – Kai