首页 > 解决方案 > 对象中列表的 Lambda

问题描述

我有一个名为 UserSettings 的对象,其中包含另一个名为 SettingsFolder 的对象的列表。该对象又具有 SettingsFolders 列表。这个想法是模仿拥有一组文件夹的用户,并且文件夹可以有子文件夹。我正在尝试编写一个 lambda 函数,该函数将找到提供给定 ID 的给定对象。

现在我有 2 个 lambda,一个将顶级文件夹转换为流并检查 Id 是否存在并返回对象,另一个检查子文件夹。

对于父级文件夹

SettingsFolder settingsFolder = userSettings.getFolders().stream()
    .filter(folder -> folder.getId().equals(UUID.fromString(form.getFolderId())))
    .findAny()
    .orElse(null);

对于子文件夹

List<SettingsFolder> settingsFolders = userSettings.getFolders().stream()
    .filter(folder -> folder.getFolders() != null)
    .filter(folder -> folder.getFolders().size() > 0)
    .collect(Collectors.toList());
SettingsFolder subFolder = settingsFolders.stream()
    .flatMap(e -> e.getFolders().stream())
    .filter(c -> c.getId() != null)
    .filter(c -> c.getId().equals(UUID.fromString(form.getFolderId())))
    .findAny()
    .orElse(null);

有没有办法将 2 个 lambda 组合成一个,理想情况下递归检查所有这些列表?

标签: javalambdajava-8

解决方案


推荐阅读