मेरे पास MonitoredData
नामक एक कक्षा है जिसके साथ एक गतिविधि, इसके प्रारंभिक समय और समाप्ति समय का वर्णन किया गया है। विशेषताएं activityLabel
, startTime
, endTime
हैं। मुझे धाराओं का उपयोग करके इन गतिविधियों को समूहित और फ़िल्टर करना होगा, जिन गतिविधियों की कुल अवधि 10 घंटे से अधिक हो। मैं गतिविधि इस का उपयोग कर के अनुसार अवधियों का योग है और उन्हें समूह बनाने में कामयाब रहे:जावा स्ट्रीम फ़िल्टर मानों का योग
Map<String, Long> map4 = new HashMap<String, Long>();
map4 = data.stream()
.collect(
Collectors.groupingBy(
MonitoredData::getActivity,
Collectors.summingLong(MonitoredData::getDuration)
)
); //getDuration returns end Time - startTime in milliseconds
लेकिन मैं एक फ़िल्टर जोड़ें करने में कामयाब नहीं किया है। मैंने इसका उपयोग करने की कोशिश की:
.filter(Collectors.summingLong(MonitoredData::getDuration) > whatever)
लेकिन स्पष्ट रूप से यह काम नहीं करता है। इसे Map<String, Long>
वापस करने के लिए मैं इसे कैसे हल कर सकता हूं?
'संग्रह' ऑपरेशन से पहले '.filter' जोड़ें? –
आपको पहले 'obj -> (obj, sumDuration)' मानचित्र करना चाहिए और फिर परिणामस्वरूप ऑब्जेक्ट पर फ़िल्टर लागू करना चाहिए। – NiVeR
मैं फोन पर हूं, शायद आपका प्रश्न इस तरह से है [http] // http: // stackoverflow।com/प्रश्न/44097658/कैसे करने वाली भेजने-पैरामीटर-टु-ए-संदर्भ-विधि में एक धारा-जावा-8/44098230 # 44098230)/[कि] (http://stackoverflow.com/questions/44086903/कैसे-टू-एड-डेटाटाइम-वैल्यू-इन-ए-स्ट्रीमजवा/44087302 # 44087302) फ़िल्टरिंग को छोड़ देता है। आप ग्रौइंग/विलय करके और फिर फ़िल्टर करके अपना पूरा कर सकते हैं। –