Java Streamの使い方
■Streamの生成
public class Main {
public static void main(String[] args) {
//ListからStreamを取得
List<String> list = Arrays.asList("orange", "apple", "lemon");
Stream<String> listStream = list.stream();
//SetからStreamを取得
Set<String> set = new HashSet<>();
Stream<String> setStream = set.stream();
//MapからStreamを取得
Map<String, String> map = new HashMap<>();
Stream<Map.Entry<String, String>> mapStream = map.entrySet().stream();
//配列からStreamを取得
String[] array = {"orange", "apple", "lemon"};
Stream<String> arrayStream = Stream.of(array);
//固定の要素からStreamを取得
Stream<String> attributeStream = Stream.of("orange", "apple", "lemon");
}
}
■Streamの要素を繰り返す
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("orange", "apple", "lemon");
//ラムダ式で要素を繰り返す
list.stream().forEach(e -> System.out.println(e));
//メソッド参照で要素を繰り返す
list.stream().forEach(System.out::println);
}
}
■Streamの要素をフィルタリング
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("orange", "apple", "lemon");
//「ora」を含む要素でフィルタリング
list.stream()
.filter(e -> e.contains("ora"))
.forEach(e -> System.out.println(e));
}
}
■Streamの要素を変換
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("orange", "apple", "lemon");
//mapで要素を大文字に変換
//map()メソッド:引数にStreamの要素を受け取り、変換後の値を返すラムダ式を渡す
list.stream()
.map(e -> e.toUpperCase())
.forEach(System.out::println);
//flatMapで要素を大文字に変換
//flatMap()メソッド:引数にラムダ式を渡すとラムダ式が返したStreamの要素が連結されたStreamで返す
list.stream()
.flatMap(e -> Stream.of(e.toUpperCase()))
.forEach(System.out::println);
}
}
■Streamをコレクションに変換
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("orange", "apple", "lemon");
//map()メソッドでラムダ式の結果のStreamを返し、「collect(Collectors.toList())」でListに変換
List<String> resultList = list.stream()
.map(e -> e.toUpperCase())
.collect(Collectors.toList());
resultList.stream().forEach(System.out::println);
//Setに変換
Set<String> resultSet = list.stream()
.map(e -> e.toUpperCase())
.collect(Collectors.toSet());
resultSet.stream().forEach(System.out::println);
//Mapに変換
Map<String, Integer> resultMap = list.stream()
.collect(Collectors.toMap(
e -> e,
e -> e.length()));
resultMap.entrySet().stream().forEach(System.out::println);
}
}
Streamの要素を並列処理
public class Main {
public static void main(String[] args) {
//Listの並列処理
List<String> list = Arrays.asList("orange", "apple", "lemon");
//「parallelStream()」で並列処理可能なStreamを取得
list.parallelStream()
.map(e -> e.toUpperCase())
.forEach(System.out::println);
//Streamの並列処理
IntStream.range(1, 100)
.parallel() //並列処理可能なStreamを取得
.filter(e -> e % 2 == 0) //偶数でフィルタリング
.forEach(System.out::println);
}
}