jtb*_*b07 5 java collections lambda java-8 java-stream
我对java流还很陌生,我试图确定如何在列表列表中的每个列表中找到最大值,并以包含每个子列表中的最大值的单个列表结束。
我可以通过使用for循环来完成此操作,stream如下所示:
// databaseRecordsLists is a List<List<DatabaseRecord>>
List<DatabaseRecord> mostRecentRecords = new ArrayList<>();
for (List<DatabaseRecord> databaseRecords : databaseRecordsLists) {
mostRecentRecords.add(databaseRecords.stream()
.max(Comparator.comparing(DatabaseRecord::getTimestamp))
.orElseThrow(NoSuchElementException::new));
}
Run Code Online (Sandbox Code Playgroud)
我已经研究了flatMapapi,但最终我只会得到所有DatabaseRecord对象的单个映射,其中我需要每个单独列表中的最大值。
关于更清洁的方式来实现这一目标有什么想法吗?
你不需要flatMap。创建一个Stream<List<DatabaseRecord>>,并将每个 映射List<DatabaseRecord>到Stream最大元素。然后将所有最大元素收集到输出中List。
List<DatabaseRecord> mostRecentRecords =
databaseRecordsLists.stream()
.map(list -> list.stream()
.max(Comparator.comparing(DatabaseRecord::getTimestamp))
.orElseThrow(NoSuchElementException::new))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |