LoginSignup
10
12

More than 5 years have passed since last update.

Java8ストリーム、ラムダ式まとめ

Posted at

Java8ストリーム、ラムダ式まとめ

次の現場がJava8なので、復習もかねてよく使用したコード例を中心にまとめる。

参考
http://www.ne.jp/asahi/hishidama/home/tech/java/stream.html

  1. 基本

    1. List.forEach

      List<Integer> list = Arrays.asList(1,2,3);
      list.forEach(System.out :: println);
      

      これは以下と同じ

      List<Integer> list = Arrays.asList(1,2,3);
      for(int i: list){
          System.out.println(i);
      }
      
    2. Map.forEach

      Map<Integer,String> map = new HashMap<>();
      map.put(1,"a");
      map.put(2,"b");
      map.forEach((k,v) -> System.out.println(v));
      

      これは以下と同じ

      Map<Integer,String> map = new HashMap<>();
      map.put(1,"a");
      map.put(2,"b");
      for(Entry<Integer, String> entry : map.entrySet()) {
        System.out.println(entry.getValue());
      }
      
  2. 頻出

    1. Stream.collect(Collectors.toMap()) ListからMap作成

      class Employee {
        private int id;
        private String name;
      
        public Employee(int id,String name){
          this.id = id;
          this.name = name;
        }
      
        public int getId() {
          return this.id;
        }
      
        public String getName() {
          return this.name;
        }
      }
      
      List<Employee> list = Arrays.asList(new Employee(1,"佐藤"),new Employee(2,"大木"),new Employee(3,"田中"));
      Map<Integer,String> map = lists.stream().collect(Collectors.toMap(Employee::getId,Employee::getName));
      
    2. Stream.map() List内で処理を行う

      List<Integer> list = Arrays.asList(1,2,3);
      List<Integer> list2 = list.stream().map(i -> i * 2).collect(Collectors.toList());
      
    3. Stream.filter() 絞込み

      List<Integer> list = Arrays.asList(1,2,3);
      list.stream().filter(i -> i < 3).forEach(System.out :: println);
      
    4. Stream.sorted ソート

      List<Integer> list = Arrays.asList(1,3,2);
      list.stream().sorted(Comparator.comparing(i -> i)).forEach(System.out :: println);
      
  3. まあまあ使う

    1. Stream.of() ストリーム作成

      Stream<Integer> stream = Stream.of(1,2,3);
      
    2. Stream.anyMatch() 一致するデータがあるかチェック

      List<Integer> list = Arrays.asList(1,2,3);
      boolean m = list.stream().anyMatch(i -> i == 2);
      

      上記に似たものとして、(全ての値が一致)allMatch、(全ての値が一致しない)noneMatchがある。

    3. List.stream().flatMap(l -> l.stream()) List内Listを一つにまとめる

      List<List<Integer>> list = Arrays.asList(Arrays.asList(1,2,3),Arrays.asList(4,5,6));
      List<Integer> list2 = list.stream().flatMap(l -> l.stream()).collect(Collectors.toList());
      
10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12