您好,我有一个已删除标志的 dtos 列表。我需要过滤它们并返回一个。

逻辑是,如果列表中有两项并且其中一项被删除,我将获取未删除的一项,但如果只有一项并已删除,则我将其返回。

所以基本上订单不是删除>删除>新项目。

List<Item> existingItems = service.getItems();
existingItems.stream().filter(e -> !e.getIsDeleted()).findAny().orElse(new Item());

如何修改此 Stream 管道以实现所需的逻辑?

最佳答案

您可以通过对 getIsDeleted 进行排序来实现此目的:

existingItems.stream()
             .sorted( Comparator.comparing(Item::getIsDeleted ) )
             .findFirst()
             .orElseGet(Item::new);

此解决方案假定 existingItems 包含少量项目。

关于Java 流过滤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45027510/

10-10 09:20