查找多个列表中的最大值

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对象的单个映射,其中我需要每个单独列表中的最大值。

关于更清洁的方式来实现这一目标有什么想法吗?

Era*_*ran 4

你不需要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)

  • `list.stream().max(Comparator.comparing(DatabaseRecord::getTimestamp)).orElseThrow(NoSuchElementException::new)` 是对 `Collections.max(list, Comparator.comparing( DatabaseRecord::getTimestamp))` (2认同)