我在netbeans 8.1下编码我正在使用for
循环,我很想知道IDE会建议代码格式化,所以我的原始循环是:
List<Produit> produits = pjc.findProduitEntities();
for (Produit produit : produits) {
System.out.println("p ="+produit.getTitre());
observableArrayList.add(new FXProduit(produit));
}
我最后得到两个建议,我想了解它们是否相同,或者存在一些性能或内存管理差异。
第一个建议名为use functional operation based on lambda expression
:
List<Produit> produits = pjc.findProduitEntities();
produits.stream().map((produit) -> {
System.out.println("p ="+produit.getTitre());
return produit;
}).forEach((produit) -> {
observableArrayList.add(new FXProduit(produit));
});
第二个使用inner class paradigm
List<Produit> produits = pjc.findProduitEntities();
produits.stream().map(new Function<Produit, Produit>() {
@Override
public Produit apply(Produit produit) {
System.out.println("p ="+produit.getTitre());
return produit;
}
}).forEach((produit) -> {
observableArrayList.add(new FXProduit(produit));
});
答案 0 :(得分:1)
匿名类版本最不具吸引力,因为它会为每次需要垃圾回收的调用创建一个新类和新实例。
使用peek()
,并行流和方法引用可以清理和改进流版本:
pjc.findProduitEntities().parallelStream()
.peek(produit -> System.out.println("p ="+produit.getTitre()))
.map(FXProduit::new)
.forEach(observableArrayList::add);
我假设并行处理没问题,因为对象最终在一个可观察的上下文中,顺序没有区别。即使没有并行流(即只使用.stream()
),代码仍然更加清晰。