Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在流(java)中添加日期时间值?_Java_Lambda_Java 8_Java Stream - Fatal编程技术网

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

如何在流(java)中添加日期时间值?,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,今天我开始学习Java8,所以我对Java8和它的东西还很陌生。 我有一份活动清单。活动有名称、开始时间和结束时间。对于开始时间和结束时间,我使用joda time的DateTime 我试图确定映射的表单映射(字符串、日期时间)的数据结构 对于每个活动,在监控期间计算的总持续时间 以下是我的代码片段: import java.util.ArrayList; import java.util.Map; import org.joda.time.DateTime; class Activity {

今天我开始学习Java8,所以我对Java8和它的东西还很陌生。 我有一份活动清单。活动有名称、开始时间和结束时间。对于开始时间和结束时间,我使用joda time的DateTime

我试图确定映射的表单映射(字符串、日期时间)的数据结构 对于每个活动,在监控期间计算的总持续时间

以下是我的代码片段:

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.  ... 

}
import java.util.ArrayList;
导入java.util.Map;
导入org.joda.time.DateTime;
课堂活动{
公共日期时间开始时间;
公共日期时间结束时间;
公共字符串活动标签;
公共活动(DateTime startTime、DateTime endTime、String activityLabel){
超级();
this.startTime=startTime;
this.endTime=endTime;
this.activityLabel=activityLabel;
}
}
公共班机{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
//将活动添加到列表中
添加(新活动(新日期时间(2017,5,12,13,10,0),新日期时间(2017,5,12,13,40,0),“淋浴”);
添加(新活动(新日期时间(2017,5,12,13,41,0),新日期时间(2017,5,12,14,20,0),“烹饪”);
添加(新活动(新日期时间(2017,5,12,14,20,0),新日期时间(2017,5,12,14,50,0),“进食”);
添加(新活动(新日期时间(2017,5,12,14,51,0),新日期时间(2017,5,12,15,30,0),“睡眠”);
添加(新活动(新日期时间(2017,5,12,17,22,0),新日期时间(2017,5,12,17,30,0),“淋浴”);
添加(新活动(新日期时间(2017,5,12,17,41,0),新日期时间(2017,5,12,17,50,0),“烹饪”);
添加(新活动(新日期时间(2017,5,12,17,50,0),新日期时间(2017,5,12,18,20,0),“进食”);
添加(新活动(新日期时间(2017,5,12,18,21,0),新日期时间(2017,5,12,20,30,0),“电视”);
//从列表创建流
地图;
//map=list.stream().collect(收集器.groupingBy(s->s.activityLabel,收集器…)。。。
}
}


我不知道如何获得此结果:(.我尝试了不同的方法,但我无法找到如何获得每个活动的总持续时间…感谢您的帮助!

首先开始使用Java 8 DateTime API。有一个内置的
持续时间
类。然后您可以使用:

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
        )
    ));

首先开始使用Java 8 DateTime API。有一个内置的
Duration
类。然后您可以使用:

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
        )
    ));
java-8与joda不同。这个怎么样:

Map<String, Duration> durations = list.stream().collect(Collectors.toMap(
        it -> it.activityLabel,
        it -> new Duration(it.startTime, it.endTime),
        Duration::plus
));
Map durations=list.stream().collect(Collectors.toMap(
it->it.activityLabel,
它->新的持续时间(it.startTime,it.endTime),
持续时间::加
));
java-8与joda不同。这个怎么样:

Map<String, Duration> durations = list.stream().collect(Collectors.toMap(
        it -> it.activityLabel,
        it -> new Duration(it.startTime, it.endTime),
        Duration::plus
));
Map durations=list.stream().collect(Collectors.toMap(
it->it.activityLabel,
它->新的持续时间(it.startTime,it.endTime),
持续时间::加
));

@federicoperataschaffner我不得不承认我被
groupingBy
操作抓住了。然后我想出了
toMap
方法。但最后我想用
groupingBy
@federicoperataschaffner修复了我的例子。无论如何,谢谢你的提示。@federicoperataschaffner我很高兴我承认我被
groupingBy
操作抓住了。然后我想出了
toMap
方法。但最后我想用
groupingBy
@federicoperataschaffner解决我的问题。无论如何,谢谢你的提示。