Javaエンジニア養成読本 - 6日目
年収が800万以上の社員のリスト
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class SampleClass { public static void main(String... args) { List<Emp> emps = new ArrayList<>(); for (int i = 3; i <= 12; i++) { emps.add(new Emp(i * 100)); } empsOfHighIncome1(emps) .forEach(emp -> System.out.println(emp.getIncome())); empsOfHighIncome2(emps) .forEach(emp -> System.out.println(emp.getIncome())); } public static List<Emp> empsOfHighIncome1(List<Emp> emps) { return emps.stream() .filter(emp -> emp.getIncome() >= 800) .collect(ArrayList::new, List::add, List::addAll); } public static List<Emp> empsOfHighIncome2(List<Emp> emps) { return emps.stream() .filter(emp -> emp.getIncome() >= 800) .collect(Collectors.toList()); } } class Emp { int income; Emp(int income) { this.income = income; } int getIncome() { return income; } }
学生の配列から各要素の名前を取り出して文字列表記にする
lombokも使ってみた。
import lombok.AllArgsConstructor; import lombok.Getter; import java.util.Arrays; import java.util.stream.Collectors; public class SampleClass { public static void main(String... args) { Student[] students = { new Student("A"), new Student("B"), new Student("C") }; System.out.println(toStringByName(students)); } public static String toStringByName(Student[] students) { return Arrays.stream(students) .map(Student::getName) .collect(Collectors.joining(", ", "[", "]")); } } @Getter @AllArgsConstructor class Student { private String name; }
部署別の社員のリストに変換する、並列実行
import lombok.AllArgsConstructor; import lombok.Getter; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class SampleClass { public static void main(String... args) { Dep dep1 = new Dep(); Dep dep2 = new Dep(); List<Emp> emps = Arrays.asList( new Emp("A", dep1), new Emp("B", dep2), new Emp("C", dep1), new Emp("D", dep2) ); Map<Dep, List<Emp>> map1 = empsByDep1(emps); Map<Dep, List<Emp>> map2 = empsByDep1(emps); map1.get(dep1).stream().map(Emp::getName).forEach(System.out::println); map2.get(dep2).forEach(emp -> System.out.println(emp.getName())); } public static Map<Dep, List<Emp>> empsByDep1(List<Emp> emps) { return emps.stream() .collect(Collectors.groupingBy(emp -> emp.getDep())); } public static Map<Dep, List<Emp>> empsByDep2(List<Emp> emps) { return emps.parallelStream() .collect(Collectors.groupingByConcurrent(Emp::getDep)); } } @Getter @AllArgsConstructor class Emp { private String name; private Dep dep; } class Dep { }