java - 如何在流中添加日期时间值(java)?

标签 java lambda java-8 java-stream

今天我开始学习 Java 8,所以我对 Java 8 还是很陌生。 我有一份 Activity list 。 Activity 有名称、开始时间、结束时间。对于 startTime 和 endTime,我使用的是来自 joda time 的 DateTime。

我正在尝试确定映射的 Map (String, DateTime) 形式的数据结构 对于每个 Activity ,在监控期间计算的总持续时间。

这是我的代码片段:

import java.util.ArrayList;
import java.util.Map;
import org.joda.time.DateTime;

class Activity {
public DateTime startTime;
public DateTime endTime;
public String activityLabel;

public Activity(DateTime startTime, DateTime endTime, String activityLabel) {
    super();
    this.startTime = startTime;
    this.endTime = endTime;
    this.activityLabel = activityLabel;
}
}

public class Main {

public static void main(String[] args) {
    ArrayList<Activity> list = new ArrayList<>();
//adding activities to list

    list.add(new Activity(new DateTime(2017, 5, 12, 13, 10, 0), new DateTime(2017, 5, 12, 13, 40, 0), "Showering"));
    list.add(new Activity(new DateTime(2017, 5, 12, 13, 41, 0), new DateTime(2017, 5, 12, 14, 20, 0), "Cooking"));
    list.add(new Activity(new DateTime(2017, 5, 12, 14, 20, 0), new DateTime(2017, 5, 12, 14, 50, 0), "Eating"));
    list.add(new Activity(new DateTime(2017, 5, 12, 14, 51, 0), new DateTime(2017, 5, 12, 15, 30, 0), "Sleeping"));
    list.add(new Activity(new DateTime(2017, 5, 12, 17, 22, 0), new DateTime(2017, 5, 12, 17, 30, 0), "Showering"));
    list.add(new Activity(new DateTime(2017, 5, 12, 17, 41, 0), new DateTime(2017, 5, 12, 17, 50, 0), "Cooking"));
    list.add(new Activity(new DateTime(2017, 5, 12, 17, 50, 0), new DateTime(2017, 5, 12, 18, 20, 0), "Eating"));
    list.add(new Activity(new DateTime(2017, 5, 12, 18, 21, 0), new DateTime(2017, 5, 12, 20, 30, 0), "TV"));
//creating a stream from list
    Map<String, DateTime> map;
//  map = list.stream().collect(Collectors.groupingBy(s -> s.activityLabel, Collectors.  ... 

}

我不知道如何获得这个结果:(。我尝试了不同的方法,但我无法找到如何获得每个 Activity 的总持续时间......谢谢你帮助我!

最佳答案

java-8 Duration与 joda 不同 Duration .这个怎么样:

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

关于java - 如何在流中添加日期时间值(java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44086903/

相关文章:

c# 相当于 java.util.concurrent.Future<T>

java - 为什么在数据库 android 中进行查询后调用 moveToFirst()

java - 如何使用java在具有相同密码的目录中解压缩多个受密码保护的zip文件?

java - 使用 vertx 处理 session 并记住登录用户

Java Web Start 将大量数据保存到本地系统

java - 将列表转换为 map

没有lambda表达式的python排序

python - 用 pythons 内置的 map 函数替换函数

java - 从内部列表 java 8 的对象列表中获取 ID 列表

java - 根据关键 java 流将 HashMap 列表分组为 HashMap 列表