Java 8:関数式プログラミング(lambda)
17605 ワード
なぜlambda式を使うのですか?1.javaの一般的なコマンドプログラミングパラメータの入力と戻りは値またはオブジェクトの参照のみであり、1つの関数をパラメータとする方法も、1つの関数を返す方法も宣言できません.2.python言語の人気が線形に増加しているため、関数式プログラミングも業界で肯定されている.以上の2点をまとめると、java 8にはいくつかの新しい特性が追加されています.これはjava史上最大のバージョン変更で、伝統的なコマンドプログラミングスタイルを保証した上で、関数プログラミングスタイルを追加し、lambda式は方法のパラメータと戻り値に1つの関数を入力し、返す方法です. lambda式の構文: 匿名内部クラス: forEach:
実はlambda式はインタフェースのメソッドを書き換えたオブジェクトです.関数インタフェース カスタム関数インタフェース 四大内蔵関数インタフェース Consumer:コンシューマインタフェース Supplier:供給型インタフェース
未完待続...
1. , {}
() -> System.out.println(" 1")
2. , {}
(param) -> System.out.println(" 1")
3.
(param1,param2) -> {
System.out.println(param1);
System.out.println(param2);
}
...
1.Thread:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(" ");
}
}).start();
new Thread(() -> System.out.println(" ")).start();
2.Comparator:
List<String> list = Arrays.asList("zs","ls","ww");
// :
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
// 1
Collections.sort(list,(a,z)->a.compareTo(z));
// 2
Collections.sort(list, String::compareTo);
List<Integer> list= Arrays.asList(1,2,3,4,5,6);
// : ,Consumer java
list.forEach(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println(integer);
}
});
//
list.forEach(i -> System.out.println(i));
実はlambda式はインタフェースのメソッドを書き換えたオブジェクトです
@FunctionalInterface
interface test{
void mytest();
String toString();
}
lambda式は関数インタフェースに依存しなければならない.関数インタフェースには抽象的な方法が1つしか存在せず(Objectを書き換える方法を除く).インタフェースに@FunctionalInterfaceを追加すると、このインタフェースが関数インタフェースであることを示します(この注釈を付けなくてもjavaはコンテキストで推定されますが、抽象的な方法は1つしか存在しないことを保証する必要があります)/**
* Consumer:
* void accept(T t);
*/
@Test
public void test01(){
eat(1000,e -> System.out.println(" , "+e+" "));
}
public void eat(double money, Consumer<Double> consumer){
consumer.accept(money);
}
/**
* Supplier:
* T get();
*/
@Test
public void test02(){
List<Integer> list = getNumList(10, () -> (int) (Math.random() * 100));
list.forEach(i -> System.out.println(i));
}
public List<Integer> getNumList(int num, Supplier<Integer> supplier){
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
Integer integer = supplier.get();
list.add(integer);
}
return list;
}
未完待続...