Day73 :) Stream, Optional


Stream API

  • データストリーム.必要な結果を得るために、複数の関数をアレイまたは集合に結合する
  • は、複数の方法で記憶データを処理する能力
  • を提供する.
  • Java 8から追加された機能を開始する前に、for、forEach文のみが使用されます
  • 毒性の低いfor,foreach文の欠点を補足した
  • 特長

  • 使い捨て
  • 要素
  • の要求時にのみ計算する
  • .
  • は、元のデータを変更することなく、結果を新しいストリーム
  • に保存する.
  • 複数のタスクを同時に処理
  • 大量元素
  • を迅速に処理する

    Collectionとの相違



    Stream:内部重複

  • 並列処理と最適化順序
  • 必要なデータのみをメモリにロード
  • を使用

    Collection Collection:外部繰返し[Collection:がいぶはんぷく]

  • コレクションの各アイテムには、
  • を最適化しない処理があります.
  • メモリからすべてのデータをロードし、
  • を処理する.

    ストリームストリーム


    作成


    アレイフロー

    Arrays.stream(배열);
    String[] example = new String[]{1,2,3,4,5};
    Stream<String> stream = Arrays.stream(example);

    しゅうごうりゅう

    List<String> 스트림명 = List.of("값","값","값"..);
    List<String> names = List.of("김유신","강감찬","이순신","유관순","홍길동");
    // 스트림 생성
    Stream<String> stream = names.stream();

    くうりゅう

    Stream<Object> stream = Stream.empty();
    の代わりに
  • nullを使用できます.

    ちゅうかんえんざん

  • は、初期ストリームを他のストリーム
  • に変換する.
  • は複数回利用可能であり、
  • は省略可能である.
  • は、
  • にフィルタリング、マッピングする.

    フィルタリング


    filter(Predicate)

    IntStream example = IntStream.of(7, 5, 5, 2, 1, 2, 3, 5, 4, 6);
    examle.filter(num->num <= 5) // 5,5,2,1,2,3,5,4
  • 条件式は真の値のみを返す新しいストリームは
  • を返す.

    distinct()

    String[] sample = {"서울","경기","인천","서울","부산","인천","울산"};
    sample.distict(); // 서울, 경기, 인천, 부산, 울산
  • は、新しいデータストリーム
  • を返す.

    へんかん


    map(Function)

    IntStream numbers = IntStream.of(1,3,5,7,9);
    numbers.map(num -> num*2);	// 2,6,10,14,18
  • ストリームの要素を所与の関数に渡し、戻り値によって新しいストリーム戻り
  • を実現する.

    flatMap(Function)

    // 배열생성
    String names = {"김좌진", "이순신", "안중근", "김유신", "유관순"};
    // 스트림생성
    Arrays.stream(names)
    // 스트림 변환
          .flatMap(text->Stream.of(text.split(" "))) // 김좌진, 이순신, 안중근, 김유신, 유관순
  • ストリーム要素が配列である場合、新しいストリーム戻り
  • は、各配列の各要素の戻り値を1つに結合する

    制限


    limit()

    IntStream num1 = IntStream.range(0, 10); // 0~9
    num.limit(5); // 0,1,2,3,4
  • の最初の要素から、指定された数の新しいストリーム
  • が返されます.

    skip()

    IntStream num2 = IntStream.range(0, 10); // 0~9
    num.skip(4); // 4,5,6,7,8,9
    ストリームは
  • を返し、最初の要素から指定された数を除いて、残りの要素は
  • を返します.

    ツールバーの


    sorted()

    Stream<String> hangeul = Stream.of("마","다","라","가","나");
    // 오름차순
    hangeul.sorted(); // 가,나,다,라,마
    // 내림차순
    hangeul.sorted(Comparator.reverseOrder()); // 마,라,다,나,가
  • 所定の比較者によるソート
  • default辞書順
  • さいしゅうえんざん

  • ストリームの各要素または表示結果
  • を消費する.
  • 最終演算完了時に使用できない
  • しゅつりょく


    forEach()

    Stream<String> textArray = Stream.of("Hello","Hi","java","stream");
    textArray.forEach(System.out::prinln);
  • ストリーム中の要素を出力する場合、主に
  • を用いる.

    消耗する


    reduce()

    Stream<String> countNumber = Stream.of("하나,"둘","셋,"넷");
    String countNumber = countNumber.reduce("숫자세보기! ",(s1,s2)->s1+" 다음 "+s2);
    // 숫자세보기! 하나 다음 둘 다음 셋 다음 넷
  • は、第1および第2の要素を用いる演算を行い、次いで、値および第3の要素を用いる演算
  • を行う.
  • はすべての要素を消費し、演算後に結果
  • を返す.

    検索


    findFirst()

    IntStream example = IntStream.of(4, 2, 7, 3, 5, 1, 6);
    OptionalInt result1 = stream1.findFirst(); // 4
  • ストリームは、第1の値
  • を返す.

    findAny()

    IntStream example = IntStream.of(4, 2, 7, 3, 5, 1, 6);
    OptionalInt result1 = stream1.findFirst(); // 4
  • ストリームは、第1の値
  • を返す.
  • パラレルの場合、正しい計算結果
  • を返すにはfindAny()を使用する必要があります.

    けんさ


    anyMatch()

    IntStream numbers = IntStream.of(30, 90, 70, 10);
    numbers.anyMatch(n-> n >= 70); //true
  • ストリームの一部の要素は、ある条件を満たすときに真の値
  • を返す.

    allMatch()

    IntStream numbers = IntStream.of(30, 90, 70, 10);
    numbers.allMatch(n-> n >= 10); // true
    numbers.allMatch(n-> n >= 70); // false
  • ストリームのすべての要素は、特定の条件を満たすときにtrue
  • を返す.

    noneMatch()

    IntStream numbers = IntStream.of(30, 90, 70, 10);
    numbers.noneMatch(n-> n >= 70); // false
    numbers.noneMatch(n-> n >= 95); // true
  • ストリーム内のすべての要素が特定の条件を満たさない場合、true
  • が返される.

    統計


    count()

    IntStream.of(4, 2, 7, 6, 8, 1, 5).count()); // 7
    ロングタイプは、
  • の合計
  • を返します.

    min()

    IntStream.of(4, 2, 7, 6, 8, 1, 5).min().getAsInt()) // 1
    は、
  • 要素の最小値
  • を返します.
  • getAsset()がない場合、OptionalIntの「値」形式の
  • が返されます.

    max()

    IntStream.of(4, 2, 7, 6, 8, 1, 5).max().getAsInt()) // 8
    は、
  • 要素の最大値
  • を返します.
  • getAsset()がない場合、OptionalIntの「値」形式の
  • が返されます.

    えんざん


    sum()

    IntStream.of(4, 2, 7, 6, 8, 1, 5).sum() // 33
  • 要素の合計は
  • を返します.

    average()

    IntStream.of(2,4,6,8,10).average().getAsDouble() // 6.0
  • 要素の平均は
  • を返します.
  • getAsset()がない場合、OptionalDouble[値]形式の
  • が返されます.

    収集


    collect()

    List<Integer> numberList = Stream.of(4, 2, 7, 6, 8, 1, 5).collect(Collectors.toList());
    // [4,2,7,6,8,1,5]
    Set<Integer> numberSet = Stream.of(4, 2, 7, 6, 8, 1, 5).collect(Collectors.toSet());
    // [1,2,4,5,6,7,8]
  • ストリームの各要素をList、Setなどの形式で返す

    Optional


    パッケージ
  • オブジェクトのRapperクラス.すべてのタイプの参照変数を格納可能
  • 簡単なNullPointerception処理
  • 作成


    empty()

  • は、値のないオプションオブジェクト
  • を返す.

    of()

  • nullではなく指定された値を持つOptionalオブジェクトを返します.
    保存
  • 空のときNull PointerException
  • を生成
    Optional<String> opt1 = Optional.of("가나다");
    // 가나다

    ofNullable()

  • の値を持つオプションオブジェクトまたはNullの場合、空のオプションオブジェクト
  • が返されます.
    Optional<String> opt = Optional.ofNullable("Hello,world");
    // Hello,world

    けんさ


    isPresent()

  • オブジェクトに格納値が存在する場合はtrue
  • を返す.
    Optional<String> opt = Optional.ofNullable("테스트");
    opt.isPresent() // true

    朝礼


    get()

  • Optionalオブジェクトに格納されている値を返します.
  • オブジェクトが空の場合、NoSuchElementException
  • が起動します.
    Optional<String> opt1 = Optional.of("가나다");
    opt1.get() // 가나다

    orElse()

  • オブジェクトに格納されている値を返します.値がない場合は、引数として渡す値
  • を返します.
    Optional<String> opt = Optional.empty();
    opt.orElse("비어있습니다");
    // 비어있습니다

    orElseThrow()

  • オブジェクトに格納されている値を返します.値がない場合は、引数として渡される例外
  • if-elseエラーなし
  • String name = null;  
    Optional.ofNullable(name).orElseThrow(IllegalArgumentException::new);