如何使用 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")
。我只是把这两个列表作为 a
和 b
.
您询问了如何使用 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);
我需要使用 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")
。我只是把这两个列表作为 a
和 b
.
您询问了如何使用 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);