[JAVA][クイックキャンパス]フロー


ストリーム(Stream)

  • 機能(データ抽象)
  • アレイ、
  • は、一貫した処理を実現するために、セット内で同じ演算を実行することができる
    作成して使用するストリームは、
  • を繰り返し使用できません.
  • ストリーム演算既存データ
  • は変更する.
  • 中間演算と最終演算
  • 遅延演算
  • 、すべての演算を実行する必要があります

    ストリーム演算-中間演算

  • 中間演算-フィルタ(),map()
  • 抽出(フィルタ)要素または変換要素(map()
  • 出力長が5より大きい
  • 文字列の要素のみ
  • 顧客クラスから顧客名のみ取得
  • フロー演算-最終演算

  • 消費データストリーム実行演算
  • 最終演算後、ストリームは他の演算
  • を適用できない.
  • forEach():要素
  • を1つずつ抽出
  • count():要素数
  • sum():要素の和
  • のほか、
  • の最終演算もあります.
    package stream;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Stream;
    //스트림연산
    public class ArrayListStreamTest {
    
    	public static void main(String[] args) {
    		List<String> sList=new ArrayList<String>();
    		sList.add("Tomas");
    		sList.add("Edward");
    		sList.add("Jack");
    		
    		Stream<String> stream=sList.stream();
    		stream.forEach(s->System.out.print(s+" "));
    		System.out.println();
    		
    		//sorted에 의해 자동정렬됨
    		sList.stream().sorted().forEach(s->System.out.print(s+" "));
    		System.out.println();	
    		sList.stream().map(s->s.length()).forEach(n->System.out.println(n));
    	
    	
    	}
    }

    reduce()演算

  • アプリケーションプログラマが指定する非定義演算
  • 最終演算消費ストリームの要素実行演算
  • アレイの中のすべての要素の和のreduce()演算を求めます
  • は、第2の要素のラムティーポイントに従って、複数の機能
  • を実行する.
    IntArrayTest.java
    package stream;
    
    import java.util.Arrays;
    
    public class IntArrayTest {
    
    	public static void main(String[] args) {
    		int[] arr= {1,2,3,4,5};
    		int sum=Arrays.stream(arr).sum();
    		int count=(int)Arrays.stream(arr).count();
    		
    		System.out.println(sum);
    		System.out.println(count);
    		//reduce를 이용한 모든요소의 합
    		System.out.println(Arrays.stream(arr).reduce(0, (a,b)->a+b));
    	}
    }
    
    ReduceTest.java
    package stream;
    
    import java.util.Arrays;
    import java.util.function.BinaryOperator;
    
    class CompareString implements BinaryOperator<String>{
    
    	@Override
    	public String apply(String s1, String s2) {
    		if(s1.getBytes().length >= s2.getBytes().length)
    			return s1;
    		else return s2;
    	}
    	
    }
    
    public class ReduceTest {
    
    	public static void main(String[] args) {
    		String[] greetings= {"안녕하세요---","hello","Good morning","반갑습니다"};
    		
    		//문자열의 길이가 제일긴 문자열반환
    		System.out.println(Arrays.stream(greetings).reduce("",(s1,s2)->
    		{	if(s1.getBytes().length >= s2.getBytes().length)
    			return s1;
    		else return s2;
    		}));
    		
    		//간단히 하려면 BinaryOperator인터페이스를 구현한 CompareString클래스를 만들어서 reduce로 출력하는 형식으로 만들면됨
    		System.out.println(Arrays.stream(greetings).reduce(new CompareString()).get());
    		}
    }