Java 如何使用流api求和?
我试图找出每段中两次约会之间的小时总数 部分:Java 如何使用流api求和?,java,sum,java-stream,Java,Sum,Java Stream,我试图找出每段中两次约会之间的小时总数 部分: class Segment { private final LocalDateTime departureDate; private final LocalDateTime arrivalDate; //..getter setter 航班: class Flight { private final List<Segment> segments; //.. getter setter
class Segment {
private final LocalDateTime departureDate;
private final LocalDateTime arrivalDate;
//..getter setter
航班:
class Flight {
private final List<Segment> segments;
//.. getter setter
.forEach()
操作不会返回任何内容,因此无法将其分配给sum变量。这里需要的是flatMap()
操作:
flightList.stream().flatMap(flight->flight.getSegments().stream())
.mapToInt(segment->(int)ChronoUnit.HOURS.between(segment.getDepartureDate(),segment.getArrivalDate())
.sum();
我会将航班列表
流式处理,然后平面图
得到段
s的列表,然后将它们映射到出发和到达之间的小时数和总和。注意ChronoUnit.between
返回一个长
,而不是int
:
长和=
flightList.stream()
.flatMap(f->f.getSegments().stream())
.mapToLong(s->ChronoUnit.HOURS.between(
s、 getDepartureDate(),s.getArrivalDate())
.sum();
那不应该int sum=
进入循环吗?forEach()
返回void
,因此无法编译。您可能还需要每次航班的金额,对吗?这回答了您的问题吗?问问题这里有什么问题吗?我想如果您对此进行解释,当然会更有帮助。@Eklavya抱歉,我的英语不是很好
int sum = flightList.forEach(flight -> {
flight.getSegments().stream().mapToInt(segment -> (int) ChronoUnit.HOURS.between(segment.getDepartureDate(), segment.getArrivalDate())).sum();
});