java - 如何使用 lambda 和流避免此映射的嵌套循环

标签 java loops foreach hashmap java-stream

我想改进这个算法,避免生成嵌套循环,或许可以利用流和 java 8 函数。 对于每个键,我想创建一个对象(TreeView,一个 JavaFx 的对象),并为该键相关的每个值创建一个新的“儿子”,用于树对象。

Map<MyEnum, List<myObject>> myMap = new HashMap<>();
List<TreeItem<String>> product = new ArrayList<>();
myMap.forEach((k,v) -> {  
            TreeItem<String> fatherItem = new TreeItem<String> (k.getName());
            myMap.get(k).forEach(e -> {
                    fatherItem.getChildren().add(new TreeItem<String> (e.getName());
            });
      product.add(fatherItem);
});

我真的很好奇如何改进它。预先感谢您的回答!

最佳答案

我建议您创建一种新方法来将键和列表隐藏到树项中 - 这将使您的代码比 lambda block 中的代码更清晰:

private TreeItem<String> makeTree(MyEnum root, List<MyClass> items) {
    TreeItem<String> tree = new TreeItem<>(root.getName());
    items.stream().map(MyClass::getName).map(TreeItem::new).forEach(tree::add);
    return tree;
}

这可以在单个收集器中完成,但实际上,我认为这不会使您的代码更清晰。

然后将 map 转换为树木列表变为:

List<TreeMap<String>> trees = map.entrySet().stream()
    .map(e -> makeTree(e.getKey(), e.getValue()))
    .collect(Collectors.toList());

关于java - 如何使用 lambda 和流避免此映射的嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50321219/

相关文章:

c++ - 下降循环比上升循环更有效吗?

java - java中如何停止while循环?

foreach - 如何使 Range 与 foreach 语句一起使用

php - 读取二维数组的key

java : convert Hex color #RRGGBB to rgb r g b?

java - 对 double 使用模时性能会下降

javascript - 在下面的代码中,为什么 j 应该小于 i,为什么 j<=n 不起作用(第 4 行)?

asp.net-mvc - MVC Razor 有没有办法通过从 List<string> ViewModel 生成 SelectListItems 来填充 DropdownListFor

java - 顶点 Rx-Java : reasons for eventBus subscriber being unsubscribed

Java异常层次结构,有什么意义?