なぜLambda式を使うのか詳しく言えば
https://blog.csdn.net/oXinYangonly/article/details/81369874
Lambda式 Lambdaは匿名関数であり、伝達可能なコードと理解でき、コードをデータのように伝達し、より概要的で柔軟なコードを書くことができる.よりコンパクトなコードスタイルとして、 向上させた.
匿名の内部クラスを使用してスレッドを作成します 1 2 3 4 5 6 7 8 9 上記のコードでは、 1 次に、 1 2 3 この場合、私たちのコードは3行しかありませんが、これは最終的なバージョンではありません.次のコードを見てください. 1 最小限のコード量を使用して、同じ機能を実現しました.
需要:教務システムの学生に対して照会操作を行う学生クラスを作成し、属性はそれぞれ名前、性別、学年 である. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 需要一:学生の中で3年生以上の学生 を取得する
コード構想は,上記の学生集合をパラメータとしてフィルタリングの方法に入力し,条件に合致する学生集合を返す. 1 2 3 4 5 6 7 8 9 10 11 この時、私たちは完璧に需要の中で必要な機能を実現しました!
しかし、日常開発でプログラマーが最も憎むことが起こり、需要が変わった.需要二:学生の男子学生 を取得する
考え方:最も簡単な方法で、私たちは新しい方法を書きます. 1 2 3 4 5 6 7 8 9 10 しかし、このような需要がますます多くなると、コードの中の方法は千編一律で、それぞれの方法の中で判断の条件が異なるだけで、他のコードはすべて同じで、大量の冗長コードで、私たちにコードを最適化して、再構築しなければならないことを発見しました.
無数の先輩たちが無数の穴を越えた後、コードを最適化するのに非常に良いもの--設計モードをまとめてくれました.
次に,設計モードを用いて上のコードを最適化する.は、単純なポリシーインターフェース を行うことができる. 1 2 3 4 5 これにより、これまで増加してきた需要のために書かれた千編一律の方法 を新しい方法で置き換えることができます. 1 2 3 4 5 6 7 8 9 10 このとき,メソッドに 1 2 3 4 5 6 7 8 9 10 ポリシーモードを用いて匿名の内部クラスで学生情報をフィルタリングしたが,コード全体で本当に役に立つコードは実は一言である. 1 2 しかし、私たちは機能を完成させるために、冗長なコードを繰り返し書かなければなりません.福音書: を繰り返していません. 1 このとき、私たちの最後のフィルタコードは1行しかありませんが、本当に完璧ですか?とは限らない
私たちは上にポリシーのインタフェースを作成しました.そして、方法を宣言しました.コードはまだたくさんあります.では、インタフェースを作成しなくても、フィルタリングの方法を宣言しなくても、直接1行のコードで上の機能を実現する方法はありませんか.
もちろん、 1 2 これで本当に完璧です!!!
テキストリンクhttp://blog.3811811.com/2018/08/02/%E7%BB%86%E8%AF%B4%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E4%BD%BF%E7%94%A8lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F/
Lambda式
Java
の言語表現能力を匿名の内部クラスを使用してスレッドを作成します
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("run ... ");
}
};
Thread thread = new Thread(runnable);
thread.start();
Runnable
インタフェースを使用してオブジェクトを直接作成し、6行のコードを使用しましたが、この6行のコードでは、本当に役に立つコードはrun
メソッドの1行だけです.System.out.println("run ... ");
Lambda
式を使用して、これらのコードを簡略化します.Runnable runnable = ()-> System.out.println("run ...");
Thread thread = new Thread(runnable);
thread.start();
new Thread(()->System.out.println("run ... ")).start();
Lambda
式の例需要:教務システムの学生に対して照会操作を行う
public class Student {
/**
*
*/
private String name;
/**
*
* 1
* 0
*/
private int gender;
/**
*
* 1
* 2
* 3
* 4
*/
private int grade;
}
コード構想は,上記の学生集合をパラメータとしてフィルタリングの方法に入力し,条件に合致する学生集合を返す.
public List filterStudentsByGrade(List students){、
List stus = new ArrayList<>();
for (Student s : students){
if(s.getGrade() >= 3){
stus.add(s);
}
}
return stus;
}
しかし、日常開発でプログラマーが最も憎むことが起こり、需要が変わった.
考え方:最も簡単な方法で、私たちは新しい方法を書きます.
public List filterStudentsByGender(List students){
List stus = new ArrayList<>();
for (Student s : students){
if(s.getGender() == 1){
stus.add(s);
}
}
return stus;
}
無数の先輩たちが無数の穴を越えた後、コードを最適化するのに非常に良いもの--設計モードをまとめてくれました.
次に,設計モードを用いて上のコードを最適化する.
SimpleStrategy
を作成し、方法operate
においてオブジェクトを入力することができ、その後、このインターフェースの実装クラスにおいて、フィルタ条件処理public interface SimpleStrategy<T>{
public boolean operate(T t);
}
public List filterStudentByStrategy(List students,SimpleStrategy strategy){
List stus = new ArrayList<>();
for (Student s : students){
if(strategy.operate(s)){
stus.add(s);
}
}
return stus;
}
SimpleStrategy
の実装クラスを渡すだけで,自由にフィルタリングできることが分かった.テストコードは以下の通りである.@Test
public void getMoreThanThreeGrade(){
List sts = filterStudentByStrategy(students, new SimpleStrategy() {
@Override
public boolean operate(Student student) {
return student.getGender() == 1;
}
});
}
student.getGender() == 1;
Lambda
式を使用して、冗長コードList sts = filterStudentByStrategy(students,(s)->s.getGender() == 1);
私たちは上にポリシーのインタフェースを作成しました.そして、方法を宣言しました.コードはまだたくさんあります.では、インタフェースを作成しなくても、フィルタリングの方法を宣言しなくても、直接1行のコードで上の機能を実現する方法はありませんか.
もちろん、
Lambda
式とStream API
式を使うだけで上記の機能を完璧に実現できます.List sts = students.stream().filter(student -> student.getGender() == 1).collect(Collectors.toList());
テキストリンクhttp://blog.3811811.com/2018/08/02/%E7%BB%86%E8%AF%B4%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E4%BD%BF%E7%94%A8lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F/