Java 8:映射Lambda表达式

Ran*_*aul 6 java collections lambda java-8

我有一个Map<String, List<Object>> multiFieldMap,我需要迭代它的值集并将值添加到multiFieldsList如下

public List<Object> fetchMultiFieldsList() {
    List<Object> multiFieldsList = new ArrayList<Object>();
    for (Entry<String, List<Object>> entry : multiFieldMap.entrySet()) {
        String entityName = entry.getKey();
        List<Object> ids = entry.getValue();
        for (Object id : ids) {
            Object entity = queryService.query(entityName, queryService.property("id").eq(id));
            multiFieldsList.add(entity);
        }
    }
    return multiFieldsList;
}
Run Code Online (Sandbox Code Playgroud)

我想知道这种方法可以进一步简化吗?

Era*_*ran 5

您可以使用Streams API:

List<Object> multiFieldsList = 
    multiFieldMap.entrySet()
                 .stream()
                 .flatMap(e -> e.getValue()
                                .stream()
                                .map(o -> queryService.query(e.getKey(), queryService.property("id").eq(o))))
                 .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 这通常是我个人认为全流解决方案实际上不如"旧的"foreach循环可读性的情况:p (2认同)