如何从这些对象的列表中获取对象拥有的映射作为属性

How to get a Map owned by an Object as an attribute from a List of these objects

我有一个 BOLReference 对象如下:

private String ediTransmissionId;
private List<WorkflowExceptions> workflowExceptions;

内部 WorkflowExceptions 如下所示:

private String category;
private Map<String,String> businessKeyValues;

我想从列表中获取特定的Map<String,String>businessKeyValues WorkflowExceptions 基于一些过滤器。我该怎么做?

        Map<String,String> bKeyMap = bolRef.get(0).getWorkflowExceptions()
            .stream().filter(wk->wk.getBusinessKeyValues().containsKey("ABC123"));

为了获取map businessKeyValues包含某个key, 首先,您需要应用 map() 操作从 WorkflowExceptions 对象中提取 map

然后像您在代码中所做的那样应用 filter() 操作。并且findFirst()流中第一个遇到的元素returns)作为终端操作。

方法 findFirst() returns 一个 可选 对象,因为结果可能存在也可能不存在于流中。 Optional class 为您提供了多种方法,可以根据您的需要以不同的方式处理结果不存在的情况。在下方,我使用了 orElse() 方法,如果未找到结果,该方法将提供 空映射

您可能考虑的其他选项:orElseThrow()orElseGet()or()结合其他方法)。

Map<String,String> bKeyMap = bolRef.get(0).getWorkflowExceptions()
                .stream()
                .map(WorkflowExceptions::getBusinessKeyValues)
                .filter(bkv -> bkv.containsKey("ABC123"))
                .findFirst()
                .orElse(Collections.emptyMap());