Java8: किसी सूची में वस्तुओं के विशिष्ट क्षेत्र से योग मान


82

मान लीजिए कि एक वर्ग ओब्ज है

class Obj{

  int field;
}

और आप Objउदाहरणों की एक सूची है , यानी List<Obj> lst

अब, मैं Java8 fieldमें lstफ़िल्टरिंग मानदंड (उदाहरण के लिए किसी ऑब्जेक्ट के लिए o, मानदंड है o.field > 10) के तहत सूची में ऑब्जेक्ट्स से अंतर फ़ील्ड के मानों का योग कैसे पा सकता हूं ?

जवाबों:


157

तुम कर सकते हो

int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(o -> o.getField()).sum();

या (विधि संदर्भ का उपयोग करके)

int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(Obj::getField).sum();

4
याint sum = lst.stream().mapToInt(Obj::getField).filter(n -> n > 10).sum();
4castle


6

आप collectउपयुक्त योग कलेक्टर जैसे भी कर सकते हैंCollectors#summingInt(ToIntFunction)

वह रिटर्न देता है Collectorजो इनपुट तत्वों पर लागू पूर्णांक-मूल्यवान फ़ंक्शन का योग बनाता है। यदि कोई तत्व मौजूद नहीं है, तो परिणाम 0 है।

उदाहरण के लिए

Stream<Obj> filtered = list.stream().filter(o -> o.field > 10);
int sum = filtered.collect(Collectors.summingInt(o -> o.field));


0

जावा में एक Objइकाई के साथ fieldऔर getField () विधि के लिए आप उपयोग कर सकते हैं:

List<Obj> objs ...

Stream<Obj> notNullObjs =
  objs.stream().filter(obj -> obj.getValue() != null);

Double sum = notNullObjs.mapToDouble(Obj::getField).sum();

यह उत्तर किस विषय को जोड़ता है? Indicatorप्रश्न में कहीं भी कोई उल्लेख नहीं है , और सभी उत्तर पहले से ही बहुत विशिष्ट हैं। इसलिए जब तक आप अपने उत्तर को वास्तव में विषय में उपयोगी कुछ जोड़ने के लिए संपादित नहीं कर सकते, मेरा सुझाव है कि आप इसे हटा दें।
ओलिवियर ग्रेजोइरे

ओलिवियर की अमूर्त सोच में मदद करने के लिए बदल गए नाम।
ज़ोन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.