将单个流拆分为两个列表

Split a single stream into two lists

给定一个流 Stream<Acknowledgement> mappedRecords,我如何根据两个过滤器将其分成两个列表?这是我的尝试:

List<Acknowledgement> summaryList =
    mappedRecords
        .filter(x -> x.getReportType().equals(summaryReportType))
        .collect(Collectors.toList());

List<Acknowledgement> detailList =
    mappedRecords
        .filter(x -> x.getReportType().equals(detailReportType))
        .collect(Collectors.toList());

此代码产生错误:

java.lang.IllegalStateException: stream has already been operated upon or closed

您描述的特定过滤器建议使用一种非常简洁的方法,实际上:

Map<ReportType, List<Acknowledgement>> lists = mappedRecords.collect(
   Collectors.groupingBy(x -> x.getReportType()));
List<Acknowledgement> summaryList = lists.get(summaryReportType);
List<Acknowledgement> detailList = lists.get(detailReportType);