如何使用stram().reduce()从一个基于 predicate 的列表创建两个列表

gdx19jrr  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(344)

此问题已在此处找到答案

根据流api的条件将列表拆分为子列表(8个答案)
两天前关门了。
我需要使用stream().reduce()基于 predicate 创建两个列表。我有一个类似的代码,但它不工作。

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

predicate 如下所示。

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

我想从localrequestdtolist创建两个列表,条件是 request.getsuffix().equals("00") 或者不是。我只是将这两个列表作为 ab .

wbgh16ku

wbgh16ku1#

您询问了如何使用 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);

相关问题