使用Collectors.summingInt时如何获取自定义类型而不是Integer?

Ale*_*191 13 java grouping java-8 java-stream collectors

我目前正在创建一个Map<String, Map<LocalDate, Integer>>这样的Integer代表秒:

Map<String, Map<LocalDate, Integer>> map = stream.collect(Collectors.groupingBy(
            x -> x.getProject(),
            Collectors.groupingBy(
                x -> x.getDate(),
                Collectors.summingInt(t -> t.getDuration().toSecondOfDay())
            )
        ));
Run Code Online (Sandbox Code Playgroud)

我怎么能创建一个Map<String, Map<LocalDate, Duration>>

Eug*_*ene 9

要将其IntegerCollectors.summingInta 更改为a Duration,您只需将其替换Collector为:

Collectors.collectingAndThen(
    Collectors.summingInt(t -> t.getDuration().toSecondOfDay()),
    Duration::ofSeconds
)
Run Code Online (Sandbox Code Playgroud)