जावा 8 में धारा का उपयोग करके एक पूर्णांक से अधिकतम मूल्य कैसे प्राप्त करें?


93

मेरे पास एक सूची है Integer listऔर list.stream()मैं अधिकतम मूल्य चाहता हूं। सबसे सरल तरीका क्या है? क्या मुझे तुलनित्र की आवश्यकता है?



15
स्ट्रीम का उपयोग करने के आपके पास आपके कारण हो सकते हैं, लेकिन मत भूलना Collections.max..
एलेक्सिस सी।

जवाबों:


205

आप या तो स्ट्रीम को इसमें बदल सकते हैं IntStream:

OptionalInt max = list.stream().mapToInt(Integer::intValue).max();

या प्राकृतिक आदेश तुलनित्र निर्दिष्ट करें:

Optional<Integer> max = list.stream().max(Comparator.naturalOrder());

या कम ऑपरेशन का उपयोग करें:

Optional<Integer> max = list.stream().reduce(Integer::max);

या कलेक्टर का उपयोग करें:

Optional<Integer> max = list.stream().collect(Collectors.maxBy(Comparator.naturalOrder()));

या IntSummaryStatistics का उपयोग करें:

int max = list.stream().collect(Collectors.summarizingInt(Integer::intValue)).getMax();

16
यह जानना दिलचस्प होगा कि कौन सा अधिक कुशल है।
रोलैंड

2
क्या मैं पूछ सकता हूं कि, क्यों?
चुनाव करें

23
@ पहले, यह पहले सभी पूर्णांकों को अनबॉक्स करता है, फिर अनबॉक्स किए गए लोगों की तुलना करता है। 2, 3 और 4 के समाधान प्रत्येक तुलना पर अनबॉक्सिंग को प्रभावी ढंग से दो बार करते हुए अधिक से अधिक अनबॉक्सिंग ऑपरेशन करते हैं। अंतिम व्यक्ति अधिक आंकड़ों (जैसे योग और मिनट) की गणना करता है जो यहां अनावश्यक है, लेकिन निश्चित रूप से कुछ समय लगेगा।
टैगिर वलेव

यदि आप बस एक प्राप्त करना चाहते हैं int, तो mapToInt(...).max().getAsInt()या reduce(...).get()विधि जंजीरों में
बेपन्स

1
@ बोगदान, यह हल करने योग्य है, हालांकि स्पष्ट रूप से प्रश्न में आवश्यक नहीं था। फिर भी आप इस स्थिति को कवर करते हुए अपना जवाब पोस्ट कर सकते हैं।
टैगिर वलेव

10
int max = list.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));

8
यह तभी काम करता है, जब आपके सभी मूल्य सकारात्मक हों। कम करने () में 0 के बजाय Integer.MIN_VALUE का उपयोग करें।
19


3

सही कोड:

int max = list.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));

या

int max = list.stream().reduce(Integer.MIN_VALUE, Integer::max);

0

धारा और कम के साथ

Optional<Integer> max = list.stream().reduce(Math::max);

ऐसा लगता है कि आपने इस उत्तर को दो बार पोस्ट किया और दूसरे को हटा दिया, लेकिन जैसा कि मैंने दूसरे पर टिप्पणी की थी, यह समाधान पहले से ही टैगिर के उत्तर में शामिल है ( Integer::maxलेकिन यह बिल्कुल वैसा ही है)।
डिडिएर एल

0

आप नीचे दिए गए कोड का उपयोग भी कर सकते हैं:

int max = list.stream().max(Comparator.comparing(Integer::valueOf)).get();

एक अन्य विकल्प:

list.sort(Comparator.reverseOrder()); // max value will come first
int max = list.get(0);  

0
int value = list.stream().max(Integer::compareTo).get();
System.out.println("value  :"+value );

3
अन्य उत्तर हैं जो ओपी के प्रश्न प्रदान करते हैं, और वे कई साल पहले पोस्ट किए गए थे। उत्तर पोस्ट करते समय, कृपया सुनिश्चित करें कि आप या तो एक नया समाधान जोड़ते हैं, या काफी बेहतर व्याख्या करते हैं, खासकर पुराने प्रश्नों का उत्तर देते समय।
help-info.de

-2

आप int max = Stream.of (1,2,3,4,5) .reduce (0, (a, b) -> Math.max (a, b)) का उपयोग कर सकते हैं; सकारात्मक और नकारात्मक दोनों संख्याओं के लिए काम करता है


आपको Integer.MIN_VALUEइसे नकारात्मक संख्याओं के साथ काम करने के लिए शुरू करना चाहिए ।
डिडियर एल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.