括弧(かっこ)は、約物の一つ。言語の記述の中で、その一部を一対の括弧で囲むことにより、その中と外とを区切る役割を果たす。または目立たせる。
括弧は対で使用され、先に記述される括弧を括弧開き(かっこひらき)または始め括弧(はじめかっこ)、後に記述される括弧を括弧閉じ(かっことじ)または終わり括弧(おわりかっこ)と呼ぶ。横書き表記の記述においては、相対的に左括弧(ひだりかっこ)・右括弧(みぎかっこ)とも呼ぶ。また、対となる括弧がそれぞれ縦並びの括弧を縦括弧(たてかっこ)、横並びの括弧を横括弧(よこかっこ)と呼ぶ。
とあって、
波括弧{}
波括弧(なみかっこ)は、ブレース・ブレイス(英: brace)および カーリーブラケット(英: curly bracket)・カール(英: curl)とも言う。なお、中括弧(ちゅうかっこ)と呼ばれることもあるが、この呼び方は望ましくないと考えられる。
であると...あっ!どうもボクです。 そんなわけで、今回も、Javaのお話。レッツトライ~。
{ } を使う言語ですもんね、Javaは
最近、こんな感じのJavaのソースを見たんですよ。
mainProcess: { // ここにいろんな処理
}
ホワッツ!?
見たことない書き方だな~、と思ってたところ、
⇧ 上記サイト様で紹介されていました。
どうやら、ラベル付きのブロックということになるらしい。
う~ん、なかなかトリッキーな書き方が存在するんですね。
というわけで、ついでに、関数型インターフェイスの練習で。
⇧ 上記サイト様を参考にさせていただきました。
Eclipseで、適当なJavaプロジェクトを作成。クラスも作成。
package entity; import java.io.Serializable; public class Employee implements Serializable { private String name; private int age; private String birthPlace; public Employee() { } public Employee(String name, int age, String birthPlace) { this.name = name; this.age = age; this.birthPlace = birthPlace; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getBirthPlace() { return birthPlace; } public void setBirthPlace(String birthPlace) { this.birthPlace = birthPlace; } }
package main; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; import entity.Employee; public class TestFunctionInterface { public static void main(String[] args) { // Functionインターフェース // ラムダ式、関数型インターフェイスを使う場合 Function<String, Integer> func = x -> x.length(); System.out.println("Fucntionインターフェイスを使った結果: "); System.out.println(func.apply("ベンティアドショットヘーゼルナッツバニラアーモンドキャラメルエキストラホイップキャラメルソースモカソースランバチップチョコレートクリームフラペチーノ")); // Predicateインターフェース // ラムダ式で、関数型インターフェイスを使う場合 Predicate<? super Employee> pred01 = emp -> emp.getAge() > 30 && emp.getBirthPlace().equals("America"); Predicate<? super Employee> pred02 = emp -> emp.getAge() > 30 && emp.getBirthPlace().equals("Azərbaycan Respublikası"); Predicate<? super Employee> pred03 = emp -> emp.getAge() > 30 && emp.getBirthPlace().equals("Bachikan"); Predicate<? super Employee> pred04 = emp -> emp.getAge() > 30 && emp.getBirthPlace().equals("República Federativa do Brasil"); Predicate<? super Employee> pred05 = emp -> emp.getAge() > 30 && emp.getBirthPlace().equals("Japan"); List<Predicate<? super Employee>> preds = new ArrayList<Predicate<? super Employee>>( Arrays.asList(pred01, pred02, pred03, pred04, pred05)); Employee emp01 = new Employee("Toshi", 36, "Japan"); Employee emp02 = new Employee("Rocky", 31, "Repubblica Italiana"); Employee emp03 = new Employee("Alice", 28, "Bachikan"); Employee emp04 = new Employee("Agaiefu", 33, "Azərbaycan Respublikası"); Employee emp05 = new Employee("Rob", 35, "America"); Employee emp06 = new Employee("Paulo", 71, "República Federativa do Brasil"); List<Employee> emps = new ArrayList<>(Arrays.asList(emp01, emp02, emp03, emp04, emp05, emp06)); // or 条件でフィルター emps = emps.stream() .filter(preds.stream().reduce(pred -> false, Predicate::or)) .collect(Collectors.toList()); System.out.println("Predicateインターフェースを使った結果: "); emps.forEach(emp -> { System.out.println(emp.getName()); }); } }
んで、実行してみる。
Stream APIのfilter に、Predicate のListを指定してフィルタリングできました~。
Predicateに保存する条件式をもっと汎用的に使えるようなものにすれば、いろいろ使えそうですかね?
その前に、Employee エンティティがNULLだったら落ちるね...NullPointerException対策が必要ですな(涙)。
相変わらず、関数型にはまだ慣れない、今日この頃。
今回はこのへんで。