【发布时间】:2020-02-17 20:08:22
【问题描述】:
我想使用 Streams API 来处理通话记录并计算同一电话号码的总账单金额。这是使用混合方法实现它的代码,但我想使用全功能方法:
List<CallLog> callLogs = Arrays.stream(S.split("\n"))
.map(CallLog::new)
.sorted(Comparator.comparingInt(callLog -> callLog.phoneNumber))
.collect(Collectors.toList());
for (int i = 0; i< callLogs.size() -1 ;i++) {
if (callLogs.get(i).phoneNumber == callLogs.get(i+1).phoneNumber) {
callLogs.get(i).billing += callLogs.get(i+1).billing;
callLogs.remove(i+1);
}
}
【问题讨论】:
-
你应该先分组,然后合并所有组
-
请注意 - 我强烈建议您不要将电话号码视为整数类型。这是一条经验法则 - 除非您要对数据执行数学运算,否则不要将其视为数字。即使它仅由数字成员组成。可以是电话号码、帐号或其他任何内容。如果“数字”以零开头,则在转换为实际数字类型时它们会丢失,因此帐号
0001234不仅仅是1234,这不是一回事。此外,您很容易受到整数溢出的影响——尤其是对于大数字的电话号码。
标签: java functional-programming java-stream