Mam klasę o nazwie MonitoredData
, z którą opisuje działanie, czas jego rozpoczęcia i zakończenia. Atrybuty to activityLabel
, startTime
, , ,. Muszę grupować i filtrować te działania, wykorzystując strumienie, działania, których całkowity czas trwania przekracza 10 godzin. Udało mi się zrobić sumę czasów trwania i grupować je według działalności z wykorzystaniem tego:Strumień filtrów strumienia Java o wartości
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
Ale nie udało się dodać filtr. Próbowałem użyć:
.filter(Collectors.summingLong(MonitoredData::getDuration) > whatever)
ale oczywiście to nie działa. Jak mogę rozwiązać ten problem, aby zwrócił on Map<String, Long>
?
Dodaj '.filter' przed operacją' collect'? –
Powinieneś najpierw zmapować 'obj -> (obj, sumDuration), a następnie zastosować filtr na wynikowym obiekcie. – NiVeR
Jestem na telefonie, może twoje pytanie bardziej przypomina [to] (http: // stackoverflow.com/questions/44097658/how-to-send-parameters-to-a-reference-method-in-a-stream-java-8/44098230 # 44098230)/[that] (http://stackoverflow.com/questions/44086903/how-to-add-datetime-values-in-a-streamjava/44087302 # 44087302) z wyjątkiem filtrowania. Możesz ukończyć swoje poprzez grouing/merging, a następnie filtrowanie. –