JDK 8の新しい特性Streamストリームの一般的な方法

6416 ワード

ストリーム表現には一連の要素の集合が含まれており、これらの要素を計算するために異なるタイプの操作を行うことができます.
二.中間ストリームの部分に中間操作を適用すると、再び1つのストリームが返されるので、複数の中間操作をリンクすることができます.ここではプラス記号は使用されません.
/*
Stream       

-   
          ,        ,Stream             。
-     
                                            	  
    Stream filter(Predicate predicate)   	            
    Stream limit(long maxSize)           	            ,            
    Stream skip(long n)                  	           ,              
    static  Stream concat(Stream a, Stream b)	  a b       
    Stream distinct()                    	          (  Object.equals(Object) )    
    Stream sorted()                      	            ,        
    Stream sorted(Comparator comparator) 	            ,     Comparator    
     Stream map(Function mapper)      	                      
    IntStream mapToInt(ToIntFunction mapper)	    IntStream                    

 */
public class StreamDemo {
    public static void main( String[] args ) {
        List list = new ArrayList<>();
        list.add("   ");
        list.add("    ");
        list.add("   ");
        list.add("  ");
        list.add("  ");
        System.out.println("-----------Stream filter(Predicate predicate)----------------");
       /*
       Stream filter(Predicate predicate)   	            
       Predicate  :         (     )。
       startsWith : String     ;     
        */
         list.stream().filter(s -> s.startsWith(" ")).forEach(System.out::println);//  :          

        System.out.println("-------------- Stream limit(long maxSize) ------------------");
        /*
        Stream limit(long maxSize)           	            ,            
         */
          list.stream().limit(3).forEach(s -> System.out.println(s));//        :             

        System.out.println("---------------static  Stream concat(Stream a, Stream b)-----------------");
        // Stream skip(long n)                  	           ,              
        // list.stream().skip(2).forEach(System.out::println);// 2          :         
        //static  Stream concat(Stream a, Stream b)	  a b       
        Stream limit = list.stream().limit(3);
        Stream skip = list.stream().skip(3);
        Stream.concat(limit, skip).forEach(System.out::print); //                  

        //Stream distinct()                    	          (  Object.equals(Object) )    
        Stream.concat(list.stream().limit(3), list.stream().skip(2)).distinct().forEach(System.out::println);//          :                      

        System.out.println("-------Stream sorted()   -----------");
       //Stream sorted()                      	            ,        
        list.stream().sorted().forEach(System.out::println);

        System.out.println("-------------Stream sorted(Comparator comparator)--------------------");
        //Stream sorted(Comparator comparator) 	            ,     Comparator    
        list.stream().sorted((s1,s2)->s1.length()-s2.length()).forEach(System.out::println);//         

        System.out.println("---------Stream map(Function mapper) -------------");
        // Stream map(Function mapper)      	                      
        list.stream().map(s -> s).forEach(System.out::println);// String   String
        System.out.println("-----------IntStream mapToInt(ToIntFunction mapper)------------------");
        //IntStream mapToInt(ToIntFunction mapper)	    IntStream                    
        // map      ,     Integer    sum
        List list1 = new ArrayList<>();
        list1.add(100);
        list1.add(111);
        list1.add(211);
        list1.add(311);
        int sum = list1.stream().mapToInt(s -> s).sum();//     
        System.out.println("   : "+sum);
        
        System.out.println("-------------------    ----------------------");
        list1.stream().mapToInt(s -> s)// s   s
                .average()//    
                .ifPresent(System.out::println);//      

System.out.println("-----------------------Optional findFirst\u200B()   Optional          ,  Optional      。----------------------------");
        //Optional findFirst​()   Optional          ,  Optional      。
       list1.stream().findFirst().ifPresent(System.out::println);
    }

}


結果:
   
   
  
-------------- Stream limit(long maxSize) ------------------
   
    
   
---------------static  Stream concat(Stream a, Stream b)-----------------
                 
    
   
  
  
-------Stream sorted()   -----------
   
   
  
  
    
-------------Stream sorted(Comparator comparator)--------------------
  
  
   
   
    
---------Stream map(Function mapper) -------------
   
    
   
  
  

-----------IntStream mapToInt(ToIntFunction mapper)------------------
   : 733

-------------------    ----------------------
183.25

-----------------------Optional findFirst​()   Optional          ,  Optional      。----------------------------
100

Streamストリーム終端動作方法終端動作は対流動作の終端動作であり、一般にvoidまたは非ストリームの結果を返す.
import java.util.ArrayList;
import java.util.List;

/*
Stream       【  】

-   
          ,        ,Stream           。
-     
                                 	  
    void forEach(Consumer action)	            
    long count()                 	         

 */
public class StreamDemo1 {
    public static void main( String[] args ) {
        List arr = new ArrayList<>();
        arr.add("  ");
        arr.add("    ");
        arr.add("  2");
        arr.add("  3");
        System.out.println("---------------void forEach(Consumer action)\t            ---------------");
        arr.stream().forEach(System.out::println);

        System.out.println("--------------------long count()  \t         -----------------------");
        long count = arr.stream().filter(s -> s.startsWith(" ")).count();
        System.out.println(count);//               
    }

}