如何使用 stream().reduce() 基于谓词从一个列表创建 2 个列表

How to create 2 lists from one list based on predicate using stram().reduce()

我需要使用 stream().reduce() 基于谓词创建 2 个列表。我有一个类似的代码,但它不起作用。

localRequestDTOList.stream().reduce((res, item) ->{
       res[predicate(item) ? 'a' : 'b'].push(item);
       return res;
}, { a: [], b: [] });

谓词如下所示。

public static Predicate<LocalRequestDTO> payToVendor() {
    return request -> (request.getSuffix().equals("00"));
}

我想要的是从 localRequestDTOList 创建两个列表,条件是它们是否 request.getsuffix().equals("00")。我只是把这两个列表作为 ab.

您询问了如何使用 reduce 对列表进行分区。这就像问如何用螺丝刀敲钉子一样。最好根据目的使用正确的方法。

如果你可以使用 collect() 那么你可以使用 Collectors.partitioningBy():

Map<Boolean, List<LocalRequestDTO>> partition = localRequestDTOList.stream()
    .collect(Collectors.partitioningBy(payToVendor()));
List<LocalRequestDTO> a = partition.get(true);
List<LocalRequestDTO> b = partition.get(false);