Arpanダス:
私は反復処理だリストを持って、それぞれの要素のいくつかの条件で、私は、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);
});