Java 8-Stream API

4490 ワード

フィルタリング

  • Filter(Predicate)
  • ex)新しいストリーム
  • は、名前が3文字より大きいデータのみである.
        	System.out.println("spring으로 시작하는 수업");
            springClasses.stream().filter(c -> c.getTitle().startsWith("spring")).forEach(c -> System.out.println(c.getTitle()));
    
            System.out.println("close 되지 않은 수업");
            springClasses.stream().filter(Predicate.not(OnlineClass::isClosed)).forEach(c -> System.out.println(c.getTitle()));

    変更

  • 機能(Function)またはFlatMap(Function)
  • ex)各投稿インスタンスにおいて、String titleのみが新しいストリーム
  • である
  • ex)LISTをStringのストリームとする
  •  
            System.out.println("수업 이름만 모아서 스트림 만들기");
            springClasses.stream().map(OnlineClass::getTitle).forEach(System.out::println);
      
       	System.out.println("두 수업 목록에 들어있는 모든 수업 아이디 출력");
            hyunsikEvents.stream().flatMap(Collection::stream)
                    .forEach(c -> System.out.println(c.getId()));

    作成

  • Generate(Supplier)またはIterate(T seed,UnaryOperator)
  • ex)10から1に増加する無制限デジタルストリーム
  • ex)ランダムint無制限ストリーム
  • 制限

  • limit(long)またはskip(long)
  • ex)は、最大5つの要素を含むストリームを返します.
  • ex)前に3つ抜き、ストリームを返します.
  • 	System.out.println("10부터 1씩 증가하는 무제한 스트림 중에서 앞에 10개 빼고 최대 10개 까지만");
            Stream.iterate(10, i -> i+ 1)
                    .skip(10)
                    .limit(10)
                    .forEach(System.out::println);

    ストリーム内のデータが特定の条件を満たしていることを確認

  • anyMathch(), allMatch(), nonMatch()
  • ex)kで始まる文字列があるかどうかを確認します.(true or false return)
  • ex)ストリーム内のすべての値が10未満であることを確認します.
  •         System.out.println("자바 수업 중에 Test가 들어 있는 수업 있는지 확인");
            boolean test = javaClasses.stream().anyMatch(c -> c.getTitle().contains("Test"));
            System.out.println(test);

    個数

  • count()
  • ex)10より大きい数です.
  • ストリームをデータにマージ

  • reduce(identity, BiFuntion), collect(), sum(), max()
  • ex)すべての数字の和
  • を求めます
  • ex)すべてのデータを1つのListまたはSetに移動し、
  • に類似させる.
            System.out.println("스프링 수업 중에 제목이 spring이 들어간 제목 모아서 List로 만들기");
            List<String> springList = springClasses.stream().filter(c -> c.getTitle().contains("spring"))
      			.map(OnlineClass::getTitle).collect(Collectors.toList());
            springList.forEach(System.out::println);

    flatMap


  • 複数のリストがある場合、リスト自体をStreamに送信するのではなく、リスト内のオブジェクトをポップアップしてStreamに送信する
        	List<OnlineClass> springClasses = new ArrayList<>();
            springClasses.add(new OnlineClass(1, "spring boot", true));
            springClasses.add(new OnlineClass(2, "spring data jpa", true));
            springClasses.add(new OnlineClass(3, "spring mvc", false));
            springClasses.add(new OnlineClass(4, "spring core", false));
            springClasses.add(new OnlineClass(5, "rest api development", false));
    
            List<OnlineClass> javaClasses = new ArrayList<>();
            javaClasses.add(new OnlineClass(6, "The Java Test", true));
            javaClasses.add(new OnlineClass(7, "The Java, Code manipulation", true));
            javaClasses.add(new OnlineClass(8, "The Java, 8 to 11", false));
    
            List<List<OnlineClass>> hyunsikEvents = new ArrayList<>();
            hyunsikEvents.add(springClasses);
            hyunsikEvents.add(javaClasses);
      
            System.out.println("두 수업 목록에 들어있는 모든 수업 아이디 출력");
            hyunsikEvents.stream().flatMap(Collection::stream)
                    .forEach(c -> System.out.println(c.getId()));