2017-04-02 58 views
0

我下的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)); 
    }); 
+1

[阅读此](http://softwareengineering.stackexchange.com/questions/297162/why-should-i-use-functional-operations-instead-of-a-for-loop) – Omore

+0

@Omore that very helpfull ,您的评论是一个答案 –

+0

感谢不断学习。 – Omore

回答

1

匿名类的版本是最有吸引力的,因为它创造了一个新的类和新的实例与每个需要垃圾回收的调用。

流版本可以显着使用peek()进行清理和改进,并行流和方法参考:

pjc.findProduitEntities().parallelStream() 
    .peek(produit -> System.out.println("p ="+produit.getTitre())) 
    .map(FXProduit::new) 
    .forEach(observableArrayList::add); 

我假定并行处理是确定的,由于对象在可观察到的上下文中结束,在哪个订单没有区别。即使没有并行流(即只使用.stream()),代码仍然非常干净。

+0

谢谢波希米亚人,我从这个答案中学到很多东西,我想在谷歌搜索教程,解释“::”是如何工作的,但不幸的是我不知道我们怎么称呼它,乍一看这很漂亮反思。新的将调用一个与参数相匹配的构造函数,这也感觉像Spring 1的思维方式(也许我不是正确的,因为我的英文不足)。请为我的研究提供关键字 –

+0

'::'是[方法参考](https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html)。是的,构造函数也可以使用':: new'来引用,而且'.map()'方法需要一个'Function',它接受流的元素类型并返回其他东西,这就是接受的构造函数元素的确如此。 – Bohemian

+0

即使顺序不相关,这并不意味着'observableArrayList.add'是线程安全的。事实上,这是不太可能的。结合这个事实,这个操作很可能不会从并行处理中受益...... – Holger

相关问题