0
1

More than 1 year has passed since last update.

関数プログラミング

Last updated at Posted at 2023-01-04

変換

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

0
1
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
0
1