gpt4 book ai didi

Java 8 : Iterate over a list and add to a map based on condition

转载 作者:行者123 更新时间:2023-11-30 07:41:47 26 4
gpt4 key购买 nike

我有一个列表,我正在对其进行迭代,并且在每个元素的某些条件下,我将列表的每个元素添加到特定位置的数据结构中,以下是 Java 7 中的代码。

我从列表中添加每个元素的数据结构是,

/* The data structure has two slots, one for parents and another for children */
MenuBar menuBar = new MenuBar();

现在的代码片段是,

MenuBar menuBar = new MenuBar();
for (Menu menu : menuList) {
if (isParentMenu(menu.getId())) {
menuBar.addMenu(menu);
} else {
Menu parent = getMenuById(menu.getParentId());
menuBar.addChildMenu(parent, menu);
}
}

现在我正在努力创建一个等效于相同的 Java 8 代码,以下是我正在尝试的,

// The following code is not complete , just trying
menuList.stream().filter(menu -> isParentMenu(menu.getId()))
.map(menu -> menuBar.addMenu(menu))

最佳答案

老实说,我认为您的代码不需要更改。就像现在这样,已经足够清楚了。将其更改为流甚至可能会增加一些开销,使其性能不如循环。

一个非常简单的流解决方案是:

MenuBar menuBar = new MenuBar();
menuList.stream().forEach(x -> {
if (isParentMenu(x.getId())) {
menuBar.addMenu(x);
} else {
Menu parent = getMenuById(x.getParentId());
menuBar.addChildMenu(parent, x);
}
});

或者,您可以使用partitioningBy:

Map<Boolean, List<Menu>> map = menuList.stream().collect(Collectors.partitioningBy(x -> isParentMenu(x.getId())));
map.get(true).stream().forEach(menuBar::addMenu);
map.get(false).stream().forEach(x -> {
Menu parent = getMenuById(x.getParentId());
menuBar.addChildMenu(parent, x);
});

关于Java 8 : Iterate over a list and add to a map based on condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55663288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com