How to add dateTime values in a stream(java)?

妖精的绣舞 提交于 2019-12-01 12:40:33

java-8 Duration is different with joda Duration. how about this:

Map<String, Duration> durations = list.stream().collect(Collectors.toMap(
        it -> it.activityLabel,
        it -> new Duration(it.startTime, it.endTime),
        Duration::plus
));

First start to use Java 8 DateTime API. There is a built-in Duration class. Then you can use:

Map<String, Duration> map = list.stream().collect(
    Collectors.groupingBy(a -> a.activityLabel, 
        Collectors.reducing(Duration.ZERO, 
            a -> Duration.between(a.startTime, a.endTime).abs(), Duration::plus
        )
    ));

EDIT

Since you've to use Joda you can get the same results with (using Period instead of Duration):

Map<String, Period> map = list.stream().collect(
    Collectors.groupingBy(a -> a.activityLabel, 
        Collectors.reducing(Period.ZERO, 
            a -> new Period(a.startTime, a.endTime), Period::plus
        )
    ));
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!