変換
public class Main{
public static void main(String[] args) {
final List<String> friends = Arrays.asList("Braian", "Mike", "Neal", "Hana");
// すべてのデータを出力
friends.forEach((final String name) -> System.out.println(name));
// 大文字に変換後に出力
friends.stream().map(name -> name.toUpperCase()).forEach(name -> System.out.print(name + " "));
System.out.println();
// 関数を使用した場合
friends.stream().map(String::toUpperCase).forEach(name -> System.out.print(name + " "));
}
}
検索
public class Main implements differentName {
public static void main(String[] args) {
final List<String> friends = Arrays.asList("Braian", "Mike", "Neal", "Hana");
// 検索
final long countFriendsStartH = friends.stream().filter(startsWithH).count();
System.out.println(countFriendsStartH);
System.out.println();
final long countFriendsStartM = friends.stream().filter(startsWithLetter.apply("M")).count();
System.out.println(countFriendsStartM);
}
}
import java.util.function.Function;
import java.util.function.Predicate;
public interface differentName {
//名前がHから始まるデータのみ抽出
final Predicate<String> startsWithH = name -> name.startsWith("H");
//様々な文字からスタートするデータを抽出
//String型で受け取り、Predicate型で返す。
final Function<String, Predicate<String>> startsWithLetter = (String letter) -> {
Predicate<String> checkStarts = (String name) -> name.startsWith(letter);
return checkStarts;
};
}
検索結果、適当なデータが見つからない場合
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
final List<String> friends = Arrays.asList("Braian", "Mike", "Neal", "Hana");
pickName(friends, "Z");
}
}
public static void pickName(final List<String> names, final String startingletter) {
final Optional <String>foundName = names.stream().filter(name ->name.startsWith(startingletter)).findFirst();
//指定の文字列を返すformatの%sを使用
System.out.println(String.format("A name starting with %s:%s", startingletter, foundName.orElse("No name found")));
}
文字数の合計を算出
public class Main{
public static void main(String[] args) {
final List<String> friends = Arrays.asList("Braian", "Mike", "Neal", "Hana");
System.out.println(friends.stream().mapToInt(name ->name.length()).sum());
}
}
比較
public class Main{
public static void main(String[] args) {
final List<String> friends = Arrays.asList("Braian", "Mike", "Neal", "Hana");
final Optional<String> alongName = friends.stream()
.reduce((name1, name2) -> name1.length() >= name2.length() ? name1 : name2);
alongName.ifPresent(name -> System.out.println(String.format("longest name is : %s", name)));
}
}
結合
public class Main{
public static void main(String[] args) {
final List<String> friends = Arrays.asList("Braian", "Mike", "Neal", "Hana");
System.out.println(String.join(",", friends));
参考資料
Javaによる関数型プログラミング ―Java 8ラムダ式とStream