gpt4 book ai didi

java - 如何将参数发送到流中的引用方法(java 8)?

转载 作者:行者123 更新时间:2023-11-30 06:48:35 24 4
gpt4 key购买 nike

我有一个 Activity 列表 (Activity),我想确定 Map(String, DateTime) 形式的数据结构(不是 Duration 或 Period;DateTime这是必须的)映射。对于每个 Activity ,在监控期间计算的总持续时间。

Activity 类有:activityLabel(String)startTime(DateTime)endTime(DateTime)。我使用joda 时间。这就是我所做的:

Map<String, DateTime> durations = activities.stream().collect(Collectors.toMap(
it -> it.activityLabel,
it ->new DateTime(0,0,0,0,0,0)
//,DateTime::plus
));

我想我应该使用 DateTime plus(ReadablePeriod period) DateTime plus(ReadableDuration duration) ,但我不知道如何将 Duration 或 Period 类型的参数发送到方法引用。

我怎样才能达到这个结果?

编辑:对于输入:

2011-12-03 01:00:00 2011-12-03 9:00:00 sleep

2011-12-04 03:00:00 2011-12-04 10:30:00 sleep

我应该得到输出:Sleeping 0-0-0 15:30:00 (years,months,days,hours,minutes,seconds)

最佳答案

代码(使用句点)如下所示:

 Map<String, Period> map = activities.stream()
.collect(Collectors.toMap(Activity::activityLabel, ac -> new Period(ac.getStartTime(), ac.getEndTime()),
(left, right) -> left.plus(right)));

如果您真的想将 Period 输出为字符串,您需要 PeriodFormatter

 private static PeriodFormatter periodFormatter() {
return new PeriodFormatterBuilder()
.printZeroAlways()
.minimumPrintedDigits(2)
.appendYears().appendSeparator("-")
.appendMonths().appendSeparator("-")
.appendDays().appendLiteral(" ")
.appendHours().appendSeparator(":")
.appendMinutes().appendSeparator(":")
.appendSeconds().toFormatter();
}

然后你的代码看起来更像这样:

 Map<String, String> map = activities.stream()
.collect(Collectors.collectingAndThen(
Collectors.toMap(
Activity::getLabel,
ac -> new Period(ac.getStartTime(), ac.getEndTime()),
Period::plus),
m -> m.entrySet().stream().collect(Collectors.toMap(
Entry::getKey,
e -> e.getValue().toString(periodFormatter)))));

System.out.println(map); // {Sleeping=00-00-00 15:30:00

关于java - 如何将参数发送到流中的引用方法(java 8)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44097658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com