Java8ストリーム、ラムダ式まとめ
次の現場がJava8なので、復習もかねてよく使用したコード例を中心にまとめる。
参考
http://www.ne.jp/asahi/hishidama/home/tech/java/stream.html
-
基本
-
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); }
-
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()); }
-
-
頻出
-
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));
-
Stream.map() List内で処理を行う
List<Integer> list = Arrays.asList(1,2,3); List<Integer> list2 = list.stream().map(i -> i * 2).collect(Collectors.toList());
-
Stream.filter() 絞込み
List<Integer> list = Arrays.asList(1,2,3); list.stream().filter(i -> i < 3).forEach(System.out :: println);
-
Stream.sorted ソート
List<Integer> list = Arrays.asList(1,3,2); list.stream().sorted(Comparator.comparing(i -> i)).forEach(System.out :: println);
-
-
まあまあ使う
-
Stream.of() ストリーム作成
Stream<Integer> stream = Stream.of(1,2,3);
-
Stream.anyMatch() 一致するデータがあるかチェック
List<Integer> list = Arrays.asList(1,2,3); boolean m = list.stream().anyMatch(i -> i == 2);
上記に似たものとして、(全ての値が一致)allMatch、(全ての値が一致しない)noneMatchがある。
-
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());
-