JAvaSEコレクションフレームワークの新しい特性-Streamストリーム

4675 ワード

Streamストリームは私たちのjavaの中で特に重要なもので、それは生まれつきマルチコア処理をサポートしているので、私たちは一般的にビッグデータの時にStreamストリームを使用します.これはjavaの発展方向です.その発行はJDK 1.8以降で、ビッグデータの提出によりこの新特性が発行された.コンピュータで私たちが問題を解決する一般的な2つの方法は、(1)ブランチ(2)階層1.Collectionの改善JDK 1.8以降のCollectionインタフェースでは、抽象的な方法を定義するだけでなく、一般的な方法も提供しています.
        //1.Collection  
//        //forEach    Iterator
//        //Stream     Collection
//        List list=new ArrayList<>();
//        Collections.addAll(list,"java","C++","Pathon");
//        //(1)
////        list.forEach(new Consumer() {
////            @Override
////            public void accept(String s) {
////                System.out.println(s);
////            }
////        });
//        //(2)lambda   
//        list.forEach(s-> System.out.println(s));
//        //(3)foreach  
//        list.forEach(System.out::println);


2.Streamのいくつかの操作
        //2.Stream  
//        //(1)    
//        List list=new ArrayList<>();
//        Collections.addAll(list,"java","C++","php","javaScript");
//        //   Stream  
//        Stream stream=list.stream();
//        //          java   
//        System.out.println(stream.filter((e)->e.contains("java")).count());


        //(2)   
        List list=new ArrayList<>();
        Collections.addAll(list,"java","C++","php","javaScript");
        //   stream  
        Stream stream=list.stream();
        //        
        System.out.println(stream.filter((e)->e.contains("java")).collect(Collectors.toList()));
        //        
        List resultList=stream.filter((e)->e.contains("java")).collect(Collectors.toList());
        System.out.println(resultList);
               //(3)skip limit  
        List list=new ArrayList<>();
        Collections.addAll(list,"1.java","2.C++","3.php");
        //   Stream  
        Stream stream=list.stream();
        List resultList=stream.skip(0).limit(3)
                .map((s)->s.toUpperCase())
                .collect(Collectors.toList());
        System.out.println(resultList);


注意:Streamストリームでは、終了メソッドを呼び出すと、プログラムが実際に実行されます.このような利点は、(1)私たちが毎回私たちの集合の中の要素を遍歴する必要はありません.(2)我々は非常に効率的に処理することができ、我々のサブ中間過程には必ず重複論理があり、それによってこの重複論理を置き換えることができる.3.MapReduce模型彼は全体のStreamの核心で、その操作は連個の段階から構成する:(1)map():データに対して先期の操作処理を行うことを指す.例えば:簡単な数学演算(2)reduce():データの統計分析例を行う:簡単なデータ統計操作
package com.wschase.stream;

import javax.xml.crypto.dom.DOMCryptoContext;
import java.util.ArrayList;
import java.util.DoubleSummaryStatistics;
import java.util.List;

/**
 * Author:WSChase
 * Created:2019/1/9
 */
class Order{
    private String title;
    private double price;
    private int amount;

    public Order(String title, double price, int amount) {
        this.title = title;
        this.price = price;
        this.amount = amount;
    }

    public String getTitle() {
        return title;
    }

    public double getPrice() {
        return price;
    }

    public int getAmount() {
        return amount;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }
    //   list            
}

//                
public class TestMapReduce {
    public static void main(String[] args) {
    List order=new ArrayList<>();
    order.add(new Order("Iphone",8999.99,10));
    order.add(new Order("      ",1299.99,5));
    order.add(new Order("MacBookPro",18999.99,5));
    order.add(new Order("java      ",9.99,2000));
    order.add(new Order("   ",1.99,2000));
    double allPrice=order.stream().map((obj)->obj.getPrice()*obj.getAmount())
            .reduce((sum,x)->sum+x).get();
        System.out.println("      "+allPrice);

        //                  
        DoubleSummaryStatistics dss=order.stream().mapToDouble((obj)->obj.getPrice()*obj.getAmount())
                .summaryStatistics();
        System.out.println("  :"+dss.getCount());
        System.out.println("   :"+dss.getAverage());
        System.out.println("   :"+dss.getMax());
        System.out.println("   :"+dss.getMin());
        System.out.println("  :"+dss.getSum());
    }
}


以上の例がjavaとビッグデータのレールです.