Java 这两种循环方式之间有什么区别吗?最好使用哪一种?

Java 这两种循环方式之间有什么区别吗?最好使用哪一种?,java,arraylist,collections,lambda,Java,Arraylist,Collections,Lambda,我是在netbeans 8.1下编写代码的,我使用的是for循环,我很想看看IDE对代码格式化的建议,所以我最初的循环是: List<Produit> produits = pjc.findProduitEntities(); for (Produit produit : produits) { System.out.println("p ="+produit.getTitre()); observableArrayList.add(n

我是在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));
    }
第二种方法使用内部类范式


匿名类版本最不吸引人,因为它会在每次需要垃圾收集的调用中创建一个新类和新实例

可以使用peek、并行流和方法引用来清理和改进流版本:

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

我假设并行处理是可以的,因为对象最终处于一个可观察的上下文中,在这个上下文中顺序没有区别。即使没有并行流,ie也只是使用。流代码仍然非常干净。

@Omore非常有用,你的评论是一个答案谢谢继续学习。谢谢波西米亚人,我从这个答案中学到了很多,我想在谷歌搜索教程,解释::如何工作,但不幸的是,我不知道我们如何称呼它,乍一看,这很像是反射。do new将调用一个与参数匹配的构造函数,这也感觉像Spring 1的思维方式,可能是因为我不懂英语,所以我说的不对。请为我的研究提供关键字::是一个。是的,构造函数也可以使用::new引用,是的,.map方法需要一个函数,该函数接受流的元素类型并返回其他内容,这是接受元素的构造函数所做的。即使顺序不相关,也不意味着ObservalArrayList.add是线程安全的。事实上,这是不太可能的。再加上这个事实,这个操作很可能根本不会从并行处理中受益…
    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));
    });
pjc.findProduitEntities().parallelStream()
    .peek(produit -> System.out.println("p ="+produit.getTitre()))
    .map(FXProduit::new)
    .forEach(observableArrayList::add);